Ubuntu containers with headless VNC session, Xfce4 desktop, Chinese locale and C++ development toolchain
This is a customized fork of https://github.com/ConSol/docker-headless-vnc-container specially for my C++ & Golang remote development environment.
Two customized Dockerfiles:
Dockerfile.ubuntu18.xfce.vnc
: Porting to latest Ubuntu 18.04, updated installers, removed Firefox, added Chinese locale, C++ development toolchain, Golang, network tools, theubuntu
user as uid 1000 with sudo privilege.Dockerfile.ubuntu16.xfce.vnc
: Updated installers, removed Firefox, added Chinese locale, C++ development toolchain, Golang, network tools, theubuntu
user as uid 1000 with sudo privilege.
- Build:
$ docker build -t albertzheng/docker-headless-ubuntu16-xfce-vnc -f Dockerfile.ubuntu16.xfce.vnc .
$ docker build -t albertzheng/docker-headless-ubuntu18-xfce-vnc -f Dockerfile.ubuntu18.xfce.vnc .
- Run, for example Ubuntu16:
docker run --hostname ubuntu16 -d -p 6901:6901 -p 5901:5901 -v /dev/shm:/dev/shm -v /docker/host/yourDir:/data --name ubuntu16 albertzheng/docker-headless-ubuntu16-xfce-vnc:latest
If the container is started like mentioned above, connect via one of these options:
- C++ & Golang remote development: attach
Visual Studio Code
to the container, then you will be able to start remote development viaRemote - Containers extension
- enter
bash
in the container viadocker exec -it ubuntu16 /bin/bash
- connect via
VNC viewer
localhost:5901, default password:vncpassword
- connect via noVNC HTML5 full client: http://localhost:6901/vnc.html, default password:
vncpassword
- connect via noVNC HTML5 lite client: http://localhost:6901/?password=vncpassword
$ sudo su -
This repository contains a collection of Docker images with headless VNC environments.
Each Docker image is installed with the following components:
- Desktop environment Xfce4 or IceWM
- VNC-Server (default VNC port
5901
) - noVNC - HTML5 VNC client (default http port
6901
) - Browsers:
- Mozilla Firefox
- Chromium
-
consol/centos-xfce-vnc
: Centos7 withXfce4
UI session -
consol/ubuntu-xfce-vnc
: Ubuntu withXfce4
UI session -
consol/centos-icewm-vnc
: Centos7 withIceWM
UI session -
consol/ubuntu-icewm-vnc
: Ubuntu withIceWM
UI session
It's also possible to run the images in container orchestration platforms like Kubernetes or OpenShift. For more information how to deploy containers in the cluster, take a look at:
Usage is similar for all provided images, e.g. for consol/centos-xfce-vnc
:
-
Print out help page:
docker run consol/centos-xfce-vnc --help
-
Run command with mapping to local port
5901
(vnc protocol) and6901
(vnc web access):docker run -d -p 5901:5901 -p 6901:6901 consol/centos-xfce-vnc
-
Change the default user and group within a container to your own with adding
--user $(id -u):$(id -g)
:docker run -d -p 5901:5901 -p 6901:6901 --user $(id -u):$(id -g) consol/centos-xfce-vnc
-
If you want to get into the container use interactive mode
-it
andbash
docker run -it -p 5901:5901 -p 6901:6901 consol/centos-xfce-vnc bash
-
Build an image from scratch:
docker build -t consol/centos-xfce-vnc centos-xfce-vnc
If the container is started like mentioned above, connect via one of these options:
- connect via VNC viewer
localhost:5901
, default password:vncpassword
- connect via noVNC HTML5 full client:
http://localhost:6901/vnc.html
, default password:vncpassword
- connect via noVNC HTML5 lite client:
http://localhost:6901/?password=vncpassword
Since version 1.1.0
all images run as non-root user per default, so if you want to extend the image and install software, you have to switch back to the root
user:
## Custom Dockerfile
FROM consol/centos-xfce-vnc
ENV REFRESHED_AT 2018-03-18
# Switch to root user to install additional software
USER 0
## Install a gedit
RUN yum install -y gedit \
&& yum clean all
## switch back to default user
USER 1000
Per default, since version 1.3.0
all container processes will be executed with user id 1000
. You can change the user id as follows:
Add the --user
flag to your docker run command:
docker run -it --user 0 -p 6911:6901 consol/centos-xfce-vnc
Add the --user
flag to your docker run command:
docker run -it -p 6911:6901 --user $(id -u):$(id -g) consol/centos-xfce-vnc
The following VNC environment variables can be overwritten at the docker run
phase to customize your desktop environment inside the container:
VNC_COL_DEPTH
, default:24
VNC_RESOLUTION
, default:1280x1024
VNC_PW
, default:my-pw
Simply overwrite the value of the environment variable VNC_PW
. For example in
the docker run command:
docker run -it -p 5901:5901 -p 6901:6901 -e VNC_PW=my-pw consol/centos-xfce-vnc
Simply overwrite the value of the environment variable VNC_RESOLUTION
. For example in
the docker run command:
docker run -it -p 5901:5901 -p 6901:6901 -e VNC_RESOLUTION=800x600 consol/centos-xfce-vnc
Since version 1.2.0
it's possible to prevent unwanted control via VNC. Therefore you can set the environment variable VNC_VIEW_ONLY=true
. If set, the startup script will create a random password for the control connection and use the value of VNC_PW
for view only connection over the VNC connection.
docker run -it -p 5901:5901 -p 6901:6901 -e VNC_VIEW_ONLY=true consol/centos-xfce-vnc
5.1) Chromium crashes with high VNC_RESOLUTION (#53)
If you open some graphic/work intensive websites in the Docker container (especially with high resolutions e.g. 1920x1080
) it can happen that Chromium crashes without any specific reason. The problem there is the too small /dev/shm
size in the container. Currently there is no other way, as define this size on startup via --shm-size
option, see #53 - Solution:
docker run --shm-size=256m -it -p 6901:6901 -e VNC_RESOLUTION=1920x1080 consol/centos-xfce-vnc chromium-browser http://map.norsecorp.com/
Thx @raghavkarol for the hint!
At this point we want to thank all contributors, which helped to move this great project by submitting code, writing documentation, or adapting other tools to play well together with the docker headless container.
- Tobias Schneck - Lead development
- Robert Bohne - IceWM images
- hsiaoyi0504 - PR #66
- dmhumph - PR #44
- Simon Hofmann - Current maintainer
The current changelog is provided here: changelog.md
For questions, professional support or maybe some hints, feel free to contact us via testautomatisierung@consol.de or open an issue.
The guys behind:
ConSol Software GmbH
Franziskanerstr. 38, D-81669 Munich
Tel. +49-89-45841-100, Fax +49-89-45841-111
Homepage: http://www.consol.de E-Mail: info@consol.de