【问题标题】:xhost command for docker GUI apps (Eclipse)用于 docker GUI 应用程序 (Eclipse) 的 xhost 命令
【发布时间】:2017-03-25 21:06:00
【问题描述】:
我正在考虑在 docker 中运行 GUI app。我听说这会因为 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
【问题讨论】:
标签:
eclipse
bash
docker
xserver
【解决方案1】:
[ -d ~/workspace ] || mkdir ~/workspace
这会在您的主目录中创建一个工作区目录(如果它尚不存在)。
这允许本地机器上的 root 用户连接到 X 窗口显示。
docker run -i --net=host --rm -e DISPLAY -v $HOME/workspace/:/workspace/:z docbill/ubuntu-umake-eclipse
这将运行具有以下选项的容器:
-
-i:交互式,运行此命令后输入的输入被容器内启动的进程接收。
-
--net=host: 主机联网,容器没有用隔离的网络栈启动。相反,主机的所有网络接口都可以在容器内直接访问。
-
--rm 在退出时自动清理容器。否则容器将保持停止状态。
-
-e DISPLAY 将 DISPLAY 环境变量从主机传递到容器中。这告诉 GUI 程序将其输出发送到哪里。
-
-v $HOME/workspace/:/workspace/:z 将主机上的主目录中的工作区文件夹映射到启用了 selinux 共享设置的容器内的 /workspace 文件夹。
-
docbill/ubuntu-umake-eclipse 运行此图像,由 docker hub 上的用户 docbill 创作(任何人都可以在此处创建帐户)。这不是来自 docker 的官方镜像,而是社区提交的镜像。
从选项来看,这个命令很可能是为在 RHEL 或 CentOS Docker 主机上运行的用户设计的。它不适用于适用于 Windows 的 Docker 或适用于 Mac 的 Docker,但应该适用于其他 Linux 变体。
我使用了类似的命令来运行带有 GUI 的容器,但没有 xhost 和主机网络。相反,我只是将 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