使用Docker运行桌面环境

15

问题非常明确,如何在远程 Docker 容器中启动完整的桌面环境(KDE、XFCE、Gnome 都可以)。

我在互联网上查找了很多相关主题的问题(这里)(还有这里)(以及这里),但都不是同一个问题,它们都是关于如何运行 GUI 应用程序而不是完整桌面的。

我发现:

  • 必须运行 Xvfb
  • 以某种方式在该 FrameBuffer 中运行 Xfce 等
  • 允许 x11vnc 共享正在运行的 X 环境

但是实际上我卡在这里了,总是遇到各种错误:

... (EE) Invalid screen configuration 1024x768 for -screen 0
... Cannot open /dev/tty0 (No such file or directory)

你能提供一些Dockerfile的代码行以达到目标吗?

2个回答

11

这就是我所寻找的,将桌面以最简单的形式放入 Docker 中:

FROM ubuntu
RUN apt-get update
RUN apt-get install xfce4 -y
RUN apt-get install xfce4-goodies -y
RUN apt-get purge -y pm-utils xscreensaver*
RUN apt-get install wget -y

EXPOSE 5901

RUN wget -qO- https://dl.bintray.com/tigervnc/stable/tigervnc-1.8.0.x86_64.tar.gz | tar xz --strip 1 -C /
RUN mkdir ~/.vnc
RUN echo "123456" | vncpasswd -f >> ~/.vnc/passwd
RUN chmod 600 ~/.vnc/passwd


CMD ["/usr/bin/vncserver", "-fg"]

很遗憾,我无法解决 x11vncxvfb 的问题。但是TigerVNC 表现得更好。

此示例生成带有xfce图形界面的容器,并使用密码123456运行vncserver。不需要手动覆盖~/.vnc/xstartup,因为TigerVNC默认启动X服务器!

要运行服务器:

sudo docker run --rm -dti -p 5901:5901 3ab3e0e7cb

要使用vncviewer连接到那里:

vncviewer -AutoSelect 0 -QualityLevel 9 -CompressLevel 0 192.168.1.100:5901

默认情况下,屏幕分辨率不会影响您的使用,因为它会自动调整大小以适应您的屏幕: F8 vncviewer menu

您可能还会遇到ipc_channel_posix问题(Chrome和其他浏览器将无法正常工作),为了解决这个问题,请使用内存共享来运行容器:

docker run -d --shm-size=2g --privileged -p 5901:5901 image-name

我们能否为EC2实例提供解决方案? - kesarling He-Him
@d4rk4ng31 我认为容器部署的位置并不重要。你只需要注意端口转发即可。 - Ivan Talalaev

3

x11docker允许在Docker中运行桌面环境以及单个GUI应用程序。

您能给出一些Dockerfile行吗,以达到目标?

在Docker Hub上的示例桌面镜像

x11docker进行了大量设置以保持容器隔离,并提供一些附加选项,如硬件加速或pulseaudio声音。例如:

x11docker --desktop x11docker/lxde

x11docker也支持使用SSH、VNC和HTML5的网络设置
使用xpra设置SSH的示例:
read Xenv < <(x11docker --xdummy --display=30 x11docker/lxde pcmanfm)
echo $Xenv && export $Xenv
# replace "start" with "start-desktop" to forward a desktop environment
xpra start :30 --use-display --start-via-proxy=no

从客户端系统连接到
xpra attach ssh:HOSTNAME:30  # replace HOSTNAME with IP or host name of ssh server

没有x11docker:

使用Xephyr作为主机上的嵌套X服务器的相当简短的设置如下:

Xephyr :1
docker run -v /tmp/.X11-unix/X1:/tmp/.X11-unix/X1:rw \
           -e DISPLAY=:1 \
           x11docker/xfce

一个带有Xfce桌面的简短Dockerfile:
FROM debian:stretch
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends xfce4 dbus-x11
CMD startxfce4

太棒了,x11docker 项目!非常感谢您的回答,但不幸的是我需要 远程 VNC 连接。 - Ivan Talalaev
可以使用x11docker建立VNC连接,我已经编辑了答案。但是,我对VNC不太熟悉。请参考以下讨论:https://github.com/mviereck/dockerfile-x11docker-xfce-wine-playonlinux/issues/1 。使用xpra进行SSH设置非常有效,并且经过了更多的测试。 - mviereck

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