Docker GUI应用程序的xhost命令(Eclipse)

我在Docker中运行一个GUI应用程序 。 我听说由于Xserver被暴露,这是由于安全问题。 我想知道在以下每个步骤中正在做什么,特别是xhost local:root

  • [-d〜/ workspace] || mkdir〜/ workspace
  • xhost local:root
  • docker run -i –net = host –rm -e DISPLAY -v $ HOME / workspace /:/ workspace /:z docbill / ubuntu-umake-eclipse

  • [ -d ~/workspace ] || mkdir ~/workspace

这将在主目录中创build一个工作空间目录(如果尚不存在)。

  • xhost local:root

这允许本地机器上的root用户连接到X窗口显示。

  • docker run -i --net=host --rm -e DISPLAY -v $HOME/workspace/:/workspace/:z docbill/ubuntu-umake-eclipse

这运行一个容器与以下选项:

  • -i :交互式,运行此命令后键入的input被容器内启动的进程接收。
  • --net=host :主机联网,容器不是用隔离的networking堆栈启动的。 相反,主机的所有networking接口都可以在容器内部直接访问。
  • --rm自动清理出口处的容器。 否则容器将保持停止状态。
  • -e DISPLAY从主机传入DISPLAY环境variables到容器中。 这告诉GUI程序在哪里发送他们的输出。
  • -v $HOME/workspace/:/workspace/:z启动selinux共享设置,将主机上的主目录中的工作空间文件夹映射到容器内的/ workspace文件夹。
  • docbill/ubuntu-umake-eclipse运行这个镜像,由用户docbill在docker中心(任何人都可以在这里创build一个帐户)创作。 这不是docker工人的正式形象,而是一个社区提交的形象。

从选项中,这个命令很可能是为在RHEL或CentOS Docker主机上运行的用户devise的。 它不适用于Windows的Docker或Mac版的Docker,但应该适用于其他Linux版本。

我用类似的命令来运行我的容器与GUI,但没有xhost和主机networking。 相反,我刚刚将X windows套接字( /tmp/.X11-unix )映射到容器中:

 docker run -it --rm -e DISPLAY -u `id -u` \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /etc/localtime:/etc/localtime:ro \ my_gui_image