socat:“E connect(5,LEN=4 AF=1“:0”,4):尝试在 Mac OS 上的 docker 中运行 GUI 应用程序时出现此错误

socat:“E connect(5,LEN=4 AF=1“:0”,4):尝试在 Mac OS 上的 docker 中运行 GUI 应用程序时出现此错误

我正在尝试在 Mac 主机上的 Ubuntu Docker 容器内运行 GUI 应用程序。

我的测试 Dockerfile 标记xterm

FROM ubuntu:xenial

RUN apt-get update && apt-get install -y xterm
RUN useradd -ms /bin/bash xterm
USER xterm
WORKDIR /home/xterm

下列的本教程, 我

  • 允许来自 XQuartz 的网络客户端的连接
  • 开始socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\",打印E connect(5, LEN=4 AF=1 ":0", 4): No such file or directory
  • 打开 XQuartz
  • 运行docker run -it --rm -e DISPLAY=192.168.178.36:0 --entrypoint /usr/bin/xterm xterm,其中192.168.178.36en0 是 IP 地址。此输出/usr/bin/xterm: Xt error: Can't open display: 192.168.178.36:0,错误在 socat 中第二次出现。没有显示 GUI。

这个错误是什么socat意思?

系统详细信息:

  • Docker Desktop 2.2.1.0,带有 Docker Engine 19.03.05
  • MacOS Mojave 版本 10.14.5

答案1

看来 XQuartz X Socket 被命名为/tmp/.X11-unix/X0,至少该文件在 XQuartz 启动时由 XQuartz 创建,但DISPLAY变量包含“:0”,因此socat转发到不存在的套接字。

当我在 socat 命令 ( ) 中使用该文件代替“:0”时socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:/tmp/.X11-unix/X0,不再出现错误。运行 xterm 容器还会在错误No protocol specified之前打印Can't open display

这是通过身份验证解决的,我运行了xhost +,最终允许运行xterm,但这不安全,最好这样做使用 xauth

相关内容