如何在Docker镜像内打开Ubuntu GUI

72

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

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

docker run -it ubuntu

我只看到root,但我看不到Ubuntu的图形用户界面(GUI)。我如何安装或配置GUI以在其上运行应用程序,就像我们在VM中运行一样?


需要在Docker容器中使用Ubuntu GUI的用例是什么?通常,Docker运行无头模式,因此您可以安装X并运行VNC服务器或类似的东西...但这似乎很奇怪。 - Jonnix
4
Docker镜像通常用于运行一个应用程序,最常见的是服务器或计算应用程序。有时会运行多个应用程序,但通常不用于提供UI服务。UI需要更多的功能,Docker不是一个好的使用场景。 - randominstanceOfLivingThing
我想要编写Python并调试图像中的所有内容,那么在Ubuntu镜像中实现这一点的方式是什么? - Shan Khan
1
所有的事情。请更具体一些,您想调试您的Python代码,还是其他方面? - Jonnix
8
那你最好使用虚拟机。这听起来根本不适合使用Docker。 - Jonnix
显示剩余3条评论
4个回答

83

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

然后在主机上执行以下操作之一:

enter image description here

要退出只需在终端上杀死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并不在意。

待办事项:没有音频。使用--device /dev/snd也没有帮助:

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

另请参阅:

测试环境:

  • 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)

2
在Windows机器上,我们可以安装像RealVNC这样的VNC查看器,并连接到127.0.0.1:5900。 - Dheerendra Kulkarni
1
这是目前最好的“在VNC中使用x”的解决方案之一。我只希望它是GNOME:/ - tedder42
如何与主机共享剪贴板(在主机上复制->在客户端上粘贴)? - undefined
@Kopernik 我不知道,还可以参考https://github.com/fcwu/docker-ubuntu-vnc-desktop/issues/272 - undefined

10

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

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

https://microsoftcloudexplorer.gallerycdn.vsassets.io/extensions/microsoftcloudexplorer/visualstudiotoolsfordocker-preview/0.41.0/1478598789732/205468/1/add-docker-support.png

(但这适用于Visual Studio 2015,而不是Visual Studio Code。)

谢谢你的解答,我猜我需要在我的主机工作站中使用 Visual Studio Code 编写 Python 代码,并使用 Ubuntu Python 库 Docker 镜像,对吗?然后使用它来构建。 - Shan Khan
2
@ShanKhan 是的,那就是想法。你可以使用数据卷(https://docs.docker.com/engine/tutorials/dockervolumes/#/mount-a-host-directory-as-a-data-volume)通过docker run -v将本地文件夹挂载到容器中。 - VonC
最后一个链接已经失效(404)。 - Peter Mortensen

6

2
我找到了一个简单的方法来解决这个问题。
一个常见的问题是docker没有权限访问显示器,所以在您的计算机上运行以下命令。
$ xhost +

之后,您需要了解显示器的参数。

$ echo $DISPLAY

现在,以root身份打开你的docker。
$ docker container run --rm --net host -v /tmp/.X11-unix:/tmp/.X11-unix -it image_name:tag

将您的显示参数传递给容器。
$ export DISPLAY=:0

现在你可以运行你的GUI应用程序了。


这是一个不错的起点方法,但它非常不安全,因为容器最终可能通过X11控制主机系统。 - Dmitry Mikushin
好的信息,谢谢! - vitorsmends

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接