Install VNC in Docker container

In a headless server environment, Docker is installed and the container uses the host network mode, for example --network=host.

If you want to use a desktop environment inside your container, you can install XFCE and TigerVNC. If you want to connect to the desktop from your browser rather than through a VNC client, you also need to install noVNC.

The XFCE desktop is like this:

And the noVNC is like this:

In this example:

  • The VNC port is 5966.
  • The noVNC port is 6080.

Configuration

1. Install Packages

Install XFCE, TigerVNC, noVNC, and the required supporting packages:

bash 复制代码
sudo apt update && sudo apt install -y \
  xfce4 \
  dbus-x11 \
  tigervnc-standalone-server \
  tigervnc-common \
  novnc \
  websockify

2. Set Up the VNC Password

Set the VNC password. In this example, the password is vnc123456.

bash 复制代码
mkdir -p ~/.vnc
printf "vnc123456\nvnc123456\nn\n" | vncpasswd

3. Write the Startup File

Create the VNC startup file so that XFCE starts when you connect to the VNC session.

bash 复制代码
cat > ~/.vnc/xstartup <<'EOF'
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export XDG_SESSION_TYPE=x11
exec startxfce4
EOF

chmod +x ~/.vnc/xstartup

Start and Connect

1. Start the VNC Server

Start the VNC server and set the port to 5966.

bash 复制代码
vncserver :66

The display number :66 maps to port 5966. After the VNC server starts, you can connect to the desktop with a VNC client, for example by creating a VNC session in MobaXterm.

Notice: After running vncserver :66 to start the VNC service, the current terminal may become very slow or less responsive. If you need to run other commands, open a new terminal and execute them there.

For example, when I use a container, I usually first connect to the host machine through SSH with MobaXterm. Then, on the host machine, I create a new tmux session. Inside that tmux session, I use one window to SSH into the container and start the VNC service. After the VNC service is started, I switch to other tmux windows to run the other commands I need. The tmux window that was used to start the VNC service is left idle. Do not close this window, because closing it will also stop the VNC service, even if you do not explicitly run the command to kill the VNC server.

2. Stop the VNC Server

If you want to stop the VNC server on port 5966:

bash 复制代码
vncserver -kill :66

3. Start noVNC for Browser Access

After starting the VNC server, start noVNC to allow browser-based access to the desktop:

bash 复制代码
websockify --web=/usr/share/novnc/ 0.0.0.0:6080 localhost:5966

Then use the following URL to connect:

text 复制代码
http://IP:6080/vnc.html

Replace IP with your actual IP address, for example:

text 复制代码
http://192.168.1.2:6080/vnc.html

4. Show Running VNC Services

To check the running VNC services, you can use the following command:

bash 复制代码
vncserver -list
相关推荐
Z21-X16 分钟前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
进击的荆棘2 小时前
Linux系统——线程同步与互斥之线程池和安全
linux·运维·服务器·安全·单例模式·线程
瑞雪兆丰年兮3 小时前
JavaWeb-day11-SpringBootWeb案例(文件上传)
java·运维·服务器·javaweb·oss
xbzb3 小时前
从零容器化部署 ECShop:Harbor 私有仓库 + 自定义 PHP 镜像 + LNMP 三容器
容器·php·harbor·镜像·仓库·ecshop
那明眸似水3 小时前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
腾飞开源4 小时前
03_Kubernetes 核心概念拆解:从 Spec/Status 收敛到工作负载控制器的设计逻辑
云原生·容器·kubernetes
小南家的青蛙5 小时前
微服务体系下DevOps运维岗位面试方案设计
运维·面试·职场和发展·devops
知已难寻15 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
xbzb20 小时前
镜像到底存在哪:/var/lib/docker 的四级映射与 daemon.json 配置
docker·容器·json·镜像·daemon.json·四级
Alluxio1 天前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型