繁体   English   中英

在 Windows 10 上的 Docker 容器中运行 X-Windows 桌面应用程序

[英]Running X-Windows Desktop Apps in Docker Containers on Windows 10

我想在我的 Windows 10 机器(i5、8GB、240 GB ssd、2&1 笔记本)中有一个 Linux 开发环境(Java、Intellij Idea、Clojure 和 ClojureScript)。 我可以用:

  1. Linux VM(使用 Hyper-V、VMware Player 或 Virtual Box),或
  2. 运行桌面应用程序的 docker 容器。

我想尝试第二种选择。 桌面上的 Docker Containers 中,作者使用以下命令运行 C​​hrome 浏览器 docker:

$ docker run -it \
--net host \ # may as well YOLO
--cpuset-cpus 0 \ # control the cpu
--memory 512mb \ # max memory it can use
-v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
-e DISPLAY=unix$DISPLAY \ # pass the display
-v $HOME/Downloads:/root/Downloads \ # optional, but nice
-v $HOME/.config/google-chrome/:/data \ # if you want to save state
--device /dev/snd \ # so we have sound
--name chrome \
jess/chrome

他使用的 Dockerfile 可以适应运行其他桌面应用程序,但上面的命令在 Windows 中不起作用。 我有一个 XWindows 服务器正在运行(在 Windows 10 中),但我想知道如何更改-e DISPLAY=unix$DISPLAY--device /dev/snd选项。 如何更改此命令才能工作?

Docker 使用 Hyper-V Linux VM 在 Windows 中运行。 它会比 Hyper-V(或其他 VM 系统)中的完整 Linux VM 更快,还是模块化是 docker 在这种情况下的唯一优势?

以下命令有效(我使用XcXsrv Xserver 允许来自任何来源的连接):

docker run -d --name firefox1 -e DISPLAY=your-machine-ip-address:0  jess/firefox

如果您不想命名--name firefox1您可以删除--name firefox1 电影工作正常,但没有声音。 有人可以在这里帮忙吗?

其他 Xservers 应该也能工作,只要确保你允许来自任何来源的连接(小心,这种设置在开放网络中可能是一个安全威胁)。

请记住,您的 docker 容器和您的主机实际上是不同的机器。 从 docker 容器使用 GUI 应用程序与在远程主机上运行 Linux GUI 应用程序并将其显示在本地 Windows 主机上完全相同。

当您的主机是 Linux 机器时,这很容易。 您的主机已经运行了 X 服务器。 docker 容器可以将其 X 显示导出到主机,并使用主机的 X 服务器运行 GUI 应用程序。 这就是你的 docker 命令所做的。

对于 Windows 主机,则没有这种可能性,因为它不运行 X,因此没有可以实现您想要的任何轻微修改。

您可以选择使用某些第三方工具在 Windows 上运行 X 服务器,或者使用任何其他远程连接技术,例如 VNC 或 RDP。 但是既然你想要一个开发环境,我猜你想要一个无缝的体验,而 VNC 或 RDP 窗口将不起作用。 然后你应该去在 Windows 上运行一个 X 服务器。

查看此答案以了解实现这一目标的可能方法。 另请阅读该问题的其他答案。 将主机 X 服务器用于 docker 容器应用程序可能存在安全隐患。 由于您使用的是主机 X 服务器,应用程序不再是真正的沙盒。

我有同样的问题,我需要更多的步骤。

docker 文件几乎相同:

FROM ubuntu:18.04

RUN apt-get update && apt-get install -y firefox

# Replace 1000 with your user / group id
RUN export uid=1000 gid=1000 && \
    mkdir -p /home/developer && \
    echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
    echo "developer:x:${uid}:" >> /etc/group && \
    echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
    chmod 0440 /etc/sudoers.d/developer && \
    chown ${uid}:${gid} -R /home/developer

USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox

构建是:

cat firefox.dockerfile | docker build -t firefox -

然后我不得不打开我的 x 服务器来接受与以下内容的连接:

xhost +

最后,我必须运行容器,并选择在与主机相同的网络中运行:

docker run --net host -e DISPLAY=$DISPLAY firefox

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM