在Windows 10上的Docker容器上运行桌面应用程序
我想在我的Windows 10计算机(i5,8GB,240 GB ssd,2 & 1笔记本)中拥有Linux开发环境(Java,Intellij Idea,Clojure和ClojureScript)。我可以使用:在Windows 10上的Docker容器上运行桌面应用程序
- 一个Linux VM(使用Hyper-V,VMware的Player或虚拟盒),或
- 泊坞窗容器中运行的桌面应用程序。
我想尝试第二个选项。在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在这种情况下的唯一优势?
请记住,您的码头容器和主机是几乎不同的机器。从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服务器,因此应用程序不再是真正的沙箱。
下面的命令作品(我使用的是来自任何来源的XcXsrv的Xserver允许连接):
docker run -d --name firefox1 -e DISPLAY=your-machine-ip-address:0 jess/firefox
可以删除--name firefox1
如果你不想命名泊坞窗。电影工作正常,但没有声音。有人可以帮忙吗?
其他Xservers也应该能够正常工作,只要确保允许来自任何来源的连接(小心,这种设置可能是开放网络中的安全威胁)。
我想我不够具体,我在Windows上运行一个X服务器。 – dilvan
我不认为你可以将声音连接到主机。对于显示部分,您应该使用Windows主机的主机名:'-e DISPLAY = kitchen-computer:0' – infiniteRefactor