通过Docker-X11-的GUI应用程序;无法初始化服务器";

通过Docker-X11-的GUI应用程序;无法初始化服务器";,docker,x11,opensuse,x11-forwarding,Docker,X11,Opensuse,X11 Forwarding,我试图在Debian docker映像中运行Firefox,但无法连接到X11服务器 我正在使用上面描述的方法,但是将基本映像更改为最新的Debian。我还更改了用户创建方法 Dockerfile FROM debian:latest RUN apt-get update && apt-get install -y firefox-esr RUN us

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

我正在使用上面描述的方法,但是将基本映像更改为最新的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
启动容器的命令

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服务器的cookies和身份验证会话。因此,它也必须是读/写的
  • 如果不想执行
    --net=host
    ,则可以侦听绑定到unix套接字的TCP端口并将其转发到容器

如果您想在
docker
/中运行X11应用程序,想了解内部工作原理,我建议您仔细研究一下@acran看起来很棒!一定会通过这一个谢谢堆,它确实工作!我在哪里可以读到更多关于这是如何工作的?我对X权威等知之甚少。你有什么好的资源吗?