2017-04-20 2599 views
0

我想在我的Windows 10计算机(i5,8GB,240 GB ssd,2 & 1笔记本)中拥有Linux开发环境(Java,Intellij Idea,Clojure和ClojureScript)。我可以使用:在Windows 10上的Docker容器上运行桌面应用程序

  1. 一个Linux VM(使用Hyper-V,VMware的Player或虚拟盒),或
  2. 泊坞窗容器中运行的桌面应用程序。

我想尝试第二个选项。在Docker Containers on the Desktop,笔者运行使用Chrome浏览器泊坞窗:

$ 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 

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

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

回答

0

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

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

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

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

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

+0

我想我不够具体,我在Windows上运行一个X服务器。 – dilvan

+0

我不认为你可以将声音连接到主机。对于显示部分,您应该使用Windows主机的主机名:'-e DISPLAY = kitchen-computer:0' – infiniteRefactor

1

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

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

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

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

相关问题