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

我想在我的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中 ,作者运行Chrome浏览器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中不起作用。 我有一个运行在Windows 10中的XWindows服务器,但是我想知道如何更改-e DISPLAY=unix$DISPLAY--device /dev/snd选项。 这个命令怎么能改变工作?

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

下面的命令工作(我使用XcXsrv Xserver允许来自任何来源的连接):

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

如果你不想命名--name firefox1你可以放下--name firefox1 。 电影工作正常,但没有声音。 有人可以帮忙吗?

其他Xservers也应该可以运行,只要确保允许任何来源的连接(小心,这个设置可能是开放networking中的安全威胁)。

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

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

有了Windows主机,就没有这种可能性,因为它不运行X,所以不会有轻微的修改,可以达到你想要的。

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

看看这个答案可能的方法来实现这一点。 也请阅读其他问题的答案。 Docker容器应用程序使用主机X服务器可能存在安全隐患。 由于您使用的是主机X服务器,因此应用程序不再是真正的沙箱。