通过 Docker - X11 - "Unable to init server" 的 GUI 应用程序

GUI application via Docker - X11 - "Unable to init server"

我正在尝试 运行 Debian docker 映像中的 Firefox,但无法连接到 X11 服务器。

我正在使用 here 中描述的方法,但将基本映像更改为最新的 Debian。我还更改了用户创建方法。

Dockerfile

FROM debian:latest                                                                 
RUN apt-get update && apt-get install -y firefox-esr
RUN useradd --shell /bin/bash --create-home developer && \
    usermod -aG sudo developer
  
USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox

构建容器

docker build -t firefox .

启动容器的命令

docker run -ti --rm \
   -e DISPLAY=$DISPLAY \
   -v /tmp/.X11-unix:/tmp/.X11-unix \
   firefox

错误

Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0

操作系统

OpenSUSE Leap 15.2

上下文

我正在执行上述操作以了解如何通过 docker 运行 GUI 应用程序。目的是 运行 最新版本的 FreeCAD (v19),目前在 OpenSUSE 上已损坏。

docker run --rm \
--net=host \
--env="DISPLAY" \
--volume="$HOME/.Xauthority:/home/developer/.Xauthority:rw" \
firefox

这应该适用于您的 Dockerfile!

两点

  • .Xauthority 文件也需要共享,因为它包含 X 服务器的 cookie 和身份验证会话。因此它也必须是 read/write。
  • 如果你不想做 --net=host 那么你可以监听绑定到 unix 套接字的 TCP 端口并将其转发到容器。