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

时间:2017-04-20 01:00:01

标签: linux docker windows-10 virtual-machine hyper-v

我想在我的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容器。
  3. 我想尝试第二种选择。在Docker Containers on the Desktop中,作者使用以下命令运行Chrome浏览器泊坞窗

    <body></body>

    他使用的Dockerfile可以适用于运行其他桌面应用程序,但上面的命令在Windows中不起作用。我有一台XWindows服务器正在运行(在Windows 10中),但我想知道如何更改$ 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 -e DISPLAY=unix$DISPLAY选项。如何更改此命令?

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

3 个答案:

答案 0 :(得分:1)

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

virtualenv -p python3 env

如果您不想为泊坞广告命名,可以删除docker run -d --name firefox1 -e DISPLAY=your-machine-ip-address:0 jess/firefox 。电影工作正常,但没有声音。有人可以在这里帮忙吗?

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

答案 1 :(得分:0)

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

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

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

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

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

答案 2 :(得分:0)

我遇到了同样的问题,我还需要几个步骤。

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