This project provides a docker image which supports ubuntu desktop (xfce4, lightweight, fast and low on system resources), so that you can run virtual ubuntu desktop in container, you can access it by using ssh or remote desktop just like a virtual machine.
Hardware GPU accelerated rendering for 3D GUI application is supported in container, it's based on EGL by using VirtualGL, and doesn't require /tmp/.X11-unix. if you needn't hardware GPU accelerated rendering, you can also run this container on headless host without GPU (for exmaple, Cloud Server), remote desktop and 3d GUI based on software rendering (high cpu usgae) is also supported.
Tip: Hardware GPU accelerated rendering is only verified on
ubuntu desktop systemhost withmonitor. i'm not sure if hardware GPU accelerated rendering can work for headlessubuntu server systemhost.
Tip: it's useful to share public computer resources in labs, you can run a independent computer environment like a virtual machine, but more lightweight, and easier to deploy.
- fast to deploy multiple independent developing environment on a single computer.
- easy to share files with host or another container.
- easy to transfer environment to another new computer (save and load image).
xfce4 desktop:

Supported Tags (you can find here Github Tag):
18.04, 20.04, 22.04, 24.04nvidia/cuda):18.04-cu11.0.3, 20.04-cu11.0.3 etc.{UBUNTU VERSION}-cu{CUDA VERSION}, you can find supported {CUDA VERSION} in Docker Image <nvidia/cuda>Supported {CUDA VERSION}:
- Ubuntu18.04:
11.0.3,11.1.1,11.2.2- Ubuntu20.04:
11.0.3,11.1.0,11.2.2,11.3.1,11.4.3,11.5.2,11.6.2,11.7.1- Ubuntu22.04:
11.7.1,11.8.0,12.0.1,12.1.1,12.2.2,12.3.2,12.4.1,12.5.1- Ubuntu24.04:
12.5.1,12.6.2
nvidia driverdocker and nvidia-container-runtime.Tip: the newer cuda version isn't supported if you use older nvidia driver.
pull docker image
docker pull gezp/ubuntu-desktop:20.04-cu11.0.3
# use aliyuncs mirror for chinese users (国内用户可使用阿里云仓库)
# docker pull registry.cn-hongkong.aliyuncs.com/gezp/ubuntu-desktop:20.04-cu11.0.3
create container
# create container with nomachine
docker run -d --restart=on-failure \
--name my_workspace \
--cap-add=SYS_PTRACE \
--gpus all \
--shm-size=1024m \
-e USER=ubuntu \
-e PASSWORD=ubuntu \
-e GID=$(id -g) \
-e UID=$(id -u) \
-p 10022:22 \
-p 14000:4000 \
-p 15000:5000 \
gezp/ubuntu-desktop:20.04-cu11.0.3
# create container with kasmvnc/novnc
docker run -d --restart=on-failure \
--name my_workspace \
--gpus all \
--shm-size=1024m \
-e USER=ubuntu \
-e PASSWORD=ubuntu \
-e GID=$(id -g) \
-e UID=$(id -u) \
-e REMOTE_DESKTOP=kasmvnc \
-p 10022:22 \
-p 14000:4000 \
-p 15000:5000 \
gezp/ubuntu-desktop:20.04-cu11.0.3
access container by ssh
ssh ubuntu@host-ip -p 10022
access container by remote desktop (nomachine)
access container by remote desktop (kasmvnc/novnc)
https://<host-ip>:14000 (chrome is recommended)Tip
novncoption based on TurboVNC + noVNC, which are free and open-source softwares.
features of moachine/kasmvnc/novnc:
access container by code-server (VS Code in the browser)
https://<host-ip>:15000 (chrome is recommended)configure by setting environment variables when you create container.
REMOTE_DESKTOP: nomachine (default) , kasmvnc, novnc.VNC_THREADS: RectThread num for vncserver, only used when REMOTE_DESKTOP = kasmvnc. default is 2, set 0 for auto.HTTPS_CERT: SSL pem certificate file path to use for https server(kasmvnc/nonvc)HTTPS_CERT_KEY: SSL pem key file path to use for https server(kasmvnc/nonvc)vglrun glxinfo | grep -i "opengl"
NVIDIA Product Series.you need add prefix vglrun for command when you run 3D software, for example vglrun gazebo.
# vulkan info
vulkaninfo | grep -i "GPU"
# vulkan demo
vkcube
NVIDIA Product Series if vulkan works well.add shell in .bashrc to update environment variable
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
nvidia/cuda Docker Image.for example
git clone https://github.com/gezp/docker-ubuntu-desktop.git
cd docker-ubuntu-desktop
# for 20.04
./docker_build.sh 20.04
# for 20.04-cu11.0.3 (based on nvidia/cuda)
./docker_build.sh 20.04-cu11.0.3
thanks to the authors of following related projects: