Docker 为什么我不能运行X11应用程序?

Docker 为什么我不能运行X11应用程序?,docker,containers,x11,Docker,Containers,X11,所以,正如标题所说,我是一个码头工人新手。 我下载并安装了archlinux/base容器,到目前为止它似乎工作得很好。我已经安装了一些东西,并安装了一些软件包,包括xeyes,现在我想启动xeyes。为此,我通过运行docker ps找到了容器ID,然后在我的exec命令中使用了该ID,现在看起来像: $ docker exec -it -e DISPLAY=$DISPLAY 4cae1ff56eb1 xeyes Error: Can't open display: :0 但为什么它仍然不起

所以,正如标题所说,我是一个码头工人新手。 我下载并安装了archlinux/base容器,到目前为止它似乎工作得很好。我已经安装了一些东西,并安装了一些软件包,包括xeyes,现在我想启动xeyes。为此,我通过运行docker ps找到了容器ID,然后在我的exec命令中使用了该ID,现在看起来像:

$ docker exec -it -e DISPLAY=$DISPLAY 4cae1ff56eb1 xeyes
Error: Can't open display: :0

但为什么它仍然不起作用?另外,如何停止正在运行的实例而不丢失其配置状态?之前我已经退出了容器,当我重新启动它时,我所有的配置和软件安装都消失了。这是不可取的。如何正确处理此问题?

关于X显示,您需要共享xserver套接字注意:docker不能在执行期间绑定装入卷,并设置$Display示例Dockerfile:

构建docker映像:docker Build-rm-network host-tso:57733715

运行docker容器:docker Run-rm-it-v/tmp/.X11 unix:/tmp/.X11 unix-e DISPLAY=unix$DISPLAY so:57733715


注意:如果没有指定协议的错误,您可以使用xhost+禁用主机检查,但有一个警告提醒该人员xhost以获取更多信息。

此回答可能有助于解决第一个问题,容器没有可使用的x服务器:。为了保留软件包和配置,您可能希望在Dockerfile中安装所需的软件包,此答案包含更多信息,请回答一个问题一个问题。询问如何在容器中保持状态不应与询问如何运行X处于相同的问题。也就是说,如果您在Docker容器中以交互方式安装软件,而不是从Docker文件进行安装,Docker可能不是适合您需要的工具。在运行的容器中执行并安装软件是必需的。这样做,那样做,将您的指令保存在Docker文件中是声明性的。请给我这个。在命令式系统中,如果任务中断,容器死亡,则需要从头开始重新启动。在声明式系统中,如果容器死亡,则运行新容器。
FROM archlinux/base

RUN pacman -Syyu --noconfirm xorg-xeyes

ENTRYPOINT ["xeyes"]