docker-ros2-desktop-vnc
August 7, 2026 · View on GitHub
Dockerfiles to provide HTML5 VNC interface to access Ubuntu Desktop + ROS2, based on AtsushiSaito/docker-ubuntu-sweb
ROS 1 version: https://github.com/Tiryoh/docker-ros-desktop-vnc
There are official ROS 2 Docker images provided by Open Robotics.
https://github.com/osrf/docker_images/blob/master/README.md#official-library
このツールの詳細については以下の記事で紹介しています。
The details of these tools are written in Japanese on this page.
https://memoteki.net/archives/2955
| Distro | CI |
|---|---|
| Humble | |
| Iron | |
| Jazzy | |
| Lyrical | |
| Rolling |
| Registry | Pulls (all time) | Pulls / week | Pulls / month |
|---|---|---|---|
| Docker Hub ( tiryoh/ros2-desktop-vnc) | |||
| GHCR ( ghcr.io/tiryoh/ros2-desktop-vnc) |
Quick Start
Run the docker container and access with port 6080.
Change the shm-size value depending on the situation.
docker run -p 6080:80 --shm-size=512m ghcr.io/tiryoh/ros2-desktop-vnc:lyrical
Browse http://127.0.0.1:6080/.
Troubleshooting GUI applications
Some GUI applications may not work correctly when their system calls are blocked by Docker's default seccomp profile. Reported symptoms include Gazebo displaying a blank window and VSCodium failing to launch. This may also occur with Docker Desktop on macOS.
If you encounter these symptoms, retry with the seccomp profile disabled:
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m ghcr.io/tiryoh/ros2-desktop-vnc:lyrical
Warning
seccomp=unconfined disables Docker's default system call filtering and reduces container isolation. Update Docker Engine or Docker Desktop first, and use this workaround only when necessary with a trusted image.
This workaround was originally introduced for an incompatibility between newer glibc in the container and older Docker seccomp implementations (#56), and was later required to resolve GUI blackout issues (#94).
Build
To build Docker image from this Dockerfile, run the following command.
- humble
# using "docker build"
cd humble && docker build -t tiryoh/ros2-desktop-vnc:humble .
# using "docker buildx" (amd64)
cd humble && docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:humble-amd64 .
# using "docker buildx" (arm64)
cd humble && docker buildx build --platform=linux/arm64 --progress=plain -t tiryoh/ros2-desktop-vnc:humble-arm64 .
- iron
# using "docker build"
cd iron && docker build -t tiryoh/ros2-desktop-vnc:iron .
# using "docker buildx" (amd64)
cd iron && docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:iron-amd64 .
# using "docker buildx" (arm64)
cd iron && docker buildx build --platform=linux/arm64 --progress=plain -t tiryoh/ros2-desktop-vnc:iron-arm64 .
- jazzy
# using "docker build"
cd jazzy && docker build -t tiryoh/ros2-desktop-vnc:jazzy .
# using "docker buildx" (amd64)
cd jazzy && docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:jazzy-amd64 .
# using "docker buildx" (arm64)
cd jazzy && docker buildx build --platform=linux/arm64 --progress=plain -t tiryoh/ros2-desktop-vnc:jazzy-arm64 .
- lyrical
# using "docker build"
cd lyrical && docker build -t tiryoh/ros2-desktop-vnc:lyrical .
# using "docker buildx" (amd64)
cd lyrical && docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:lyrical-amd64 .
# using "docker buildx" (arm64)
cd lyrical && docker buildx build --platform=linux/arm64 --progress=plain -t tiryoh/ros2-desktop-vnc:lyrical-arm64 .
- rolling
# using "docker build"
cd rolling && docker build -t tiryoh/ros2-desktop-vnc:rolling .
# using "docker buildx" (amd64)
cd rolling && docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:rolling-amd64 .
# using "docker buildx" (arm64)
cd rolling && docker buildx build --platform=linux/arm64 --progress=plain -t tiryoh/ros2-desktop-vnc:rolling-arm64 .
Deprecated distros (dashing, eloquent, foxy, galactic)
- dashing (deprecated)
cd dashing && docker build -t tiryoh/ros2-desktop-vnc:dashing .
- eloquent (deprecated)
cd eloquent && docker build -t tiryoh/ros2-desktop-vnc:eloquent .
- foxy (deprecated)
cd foxy && docker build -t tiryoh/ros2-desktop-vnc:foxy .
- galactic (deprecated)
cd galactic && docker build -t tiryoh/ros2-desktop-vnc:galactic .
Docker tags on hub.docker.com
foxywhich is based onfoxy/Dockerfilehumble,latestwhich is based onhumble/Dockerfileironwhich is based oniron/Dockerfilejazzywhich is based onjazzy/Dockerfilelyricalwhich is based onlyrical/Dockerfilerollingwhich is based onrolling/Dockerfile
Deprecated tags (dashing, eloquent, galactic)
deprecateddashingwhich is based ondashing/Dockerfiledeprecatedeloquentwhich is based oneloquent/Dockerfiledeprecatedgalacticwhich is based ongalactic/Dockerfile
Docker tags and build logs are listed on this page.
https://github.com/Tiryoh/docker-ros2-desktop-vnc/wiki
Related projects
- https://github.com/atinfinity/nvidia-egl-desktop-ros2
- Dockerfile to use ROS 2 on Xfce Desktop container with NVIDIA GPU support via VNC/Selkies(Full desktop streaming with WebRTC)
- https://github.com/fcwu/docker-ubuntu-vnc-desktop
- Dockerfile to access Ubuntu Xfce/LXDE/LxQT desktop environment via web VNC interface
- https://github.com/AtsushiSaito/docker-ubuntu-sweb
- Dockerfile to access Ubuntu MATE desktop environment via web VNC interface
License
This repository is released under the Apache License 2.0, see LICENSE.
Unless attributed otherwise, everything in this repository is under the Apache License 2.0.
Copyright 2020-2026 Tiryoh <tiryoh@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Acknowledgements
- This Dockerfile is based on AtsushiSaito/docker-ubuntu-sweb, licensed under the Apache License 2.0.
- This Dockerfile is based on fcwu/ubuntu-desktop-lxde-vnc, licensed under the Apache License 2.0.