如何在 Docker 映像中打开 Ubuntu GUI

Posted

技术标签:

【中文标题】如何在 Docker 映像中打开 Ubuntu GUI【英文标题】:How to open Ubuntu GUI inside a Docker image 【发布时间】:2017-04-01 04:24:52 【问题描述】:

我已经在 Windows 上的 Docker 中下载了 Ubuntu 映像。

我可以通过以下方式运行 Ubuntu:

docker run -it ubuntu

我只看到root,但我没有看到 Ubuntu GUI。如何为该映像安装或配置 GUI 并在该 GUI 上运行应用程序,就像我们在 VM 中运行一样?

【问题讨论】:

从 docker 容器中需要 Ubuntu GUI 的用例是什么? Docker 通常无头运行,因此您可以安装 X 并运行 VNC 服务器或我猜的东西......但看起来很奇怪。 Docker 镜像应该运行一个应用程序,通常是服务器或计算应用程序。有时它涉及多个应用程序,但通常不提供 UI。 UI 需要更多,因为 docker 不是一个好的用例。 我实际上想编写python代码并调试图像中的所有东西,在ubuntu图像中这样做的方法是什么? all the things。请更具体。你想调试你的python代码,还是更多? 然后使用虚拟机。这听起来不像是对 docker 的适当使用 【参考方案1】:

fcwu/docker-ubuntu-vnc-desktop

https://github.com/fcwu/docker-ubuntu-vnc-desktop 提供了方便的设置:

sudo docker run --name ubvnc -p 6080:80 -p 5900:5900 dorowu/ubuntu-desktop-lxde-vnc:bionic

然后在主机上:

访问:http://127.0.0.1:6080/#/,它运行 noVNC 更有限的 javascript VNC 客户端

运行:

sudo apt-get install tigervnc-viewer
xtigervncviewer :5900

要进入全屏模式,请按 F8 并单击菜单条目,或者直接按 F8 后按 T:https://superuser.com/questions/285843/how-do-i-switch-in-out-of-fullscreen-mode-from-the-command-line-in-realvnc 您可能需要关闭并重新打开屏幕才能使图像变大。

我也尝试过vinagre,但在 YouTube 上滚动 Firefox 时会慢很多。

vinagre 内,您可能希望go into full screen mode 能够看到完整的桌面

要退出,只需在终端上杀死 docker。并重新启动机器:

sudo docker start ubvnc

然后重新连接 VNC。然后退出机器:

sudo docker stop ubvnc

您必须等待几秒钟,让客户机上的 VNC 服务器启动,然后才能连接。

来宾内部的 Chromium 不会从菜单启动。如果您尝试从命令行启动它,它会解释原因:

Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

所以只需从 CLI 运行它:

chromium-browser --no-sandbox

Firefox 不在乎。

TODO:没有音频。 --device /dev/snd 没有帮助:

How to play sound in a Docker container on Mac OS Yosemite https://forums.docker.com/t/how-to-get-sound/36527 https://github.com/fcwu/docker-ubuntu-vnc-desktop/issues/49

编辑:他们为它添加了一个部分:https://github.com/fcwu/docker-ubuntu-vnc-desktop/tree/e4922ce92f945fc482994b7a0fd95ca5de7295b3#sound-preview-version-and-linux-only

另见:

Can you run GUI applications in a Linux Docker container?

测试日期:

Ubuntu 19.04 主机,fcwu/docker-ubuntu-vnc-desktopdorowu/ubuntu-desktop-lxde-vnc 图像 ID:70516b87e92d。 Ubuntu 21.10 主机,dorowu/ubuntu-desktop-lxde-vnc:focal (Ubuntu 20.04)

【讨论】:

在windows机器上我们可以安装一个像realvnc这样的vncviewer并连接到127.0.0.1:5900。 这是目前最有效的“x in vnc”解决方案之一。我只是希望它是 gnome :/【参考方案2】:

通常,使用 Docker 进行开发的方法是将 IDE 保留在工作站上,并使用从源代码生成的二进制文件构建映像。

您可以在domeide.github.io/ (Docker meets the IDE!)中找到许多此类工作流的示例(本地编译、在 Docker 容器中部署) 例如:Docker Tools for VisualStudio 允许您的编辑器和 Docker 进程之间的紧密集成。

(但这是针对 Visual Studio 2015,而不是 Visual Studio Code。)

【讨论】:

感谢您清除我,我想我必须在主机工作站的 VS 代码中的 Visual Studio 代码中编写 python 代码,并使用 ubuntu python 库 docker 图像的图像,对吗?并使用它构建 @ShanKhan 这就是想法,是的。您可以使用带有数据卷的 docker run -v 将本地文件夹挂载到容器中 (docs.docker.com/engine/tutorials/dockervolumes/#/…) 最后一个链接坏了(404)。【参考方案3】:

您可以直接将 Docker 容器连接到您的 X 服务器。

请参阅堆栈溢出问题Can you run GUI applications in a Docker container?

【讨论】:

以上是关于如何在 Docker 映像中打开 Ubuntu GUI的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 ubuntu docker 映像中安装“ifconfig”命令? [复制]

为啥 Ubuntu docker 映像不是 VM [重复]

在 Ubuntu 16.04 中设置 PYTHONPATH 以使 Docker 映像正常运行

如何在托管的 Ubuntu 代理上启用 Azure Pipelines 中的实验性 Docker 守护程序

initctl:无法连接到 Upstart:无法连接到套接字 /com/ubuntu/upstart:docker 映像中的连接被拒绝

无法在代理后面下载 Docker 映像