Skip to main content

How to Start and Manage Docker Containers with GUI Support

· 3 min read
Guangze Yang
R&D Researcher, Control & Robotics

This guide explains the basic operations for creating, starting, and managing Docker containers. It includes settings for using GUI applications (VS Code, RViz, etc.) within Docker.

Initial Setup​

X11 Forwarding Configuration​

To use GUI applications within Docker, enable X11 forwarding:

xhost +
About X11 Forwarding

This setting allows you to run VS Code, RViz, and other GUI applications inside Docker containers.

Security Notice

xhost + allows X11 connections from all hosts. For production environments, consider using xhost +local: for better security.

Container Creation​

Creating GUI-Enabled Containers​

sudo docker run -it -v <local_path>:/data \
--device=/dev/dri \
--group-add video \
--volume=/tmp/.X11-unix:/tmp/.X11-unix \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--name=<container_name> \
<image_name>:<tag> \
/bin/bash

Parameter Explanation​

ParameterDescription
-itEnable interactive mode and TTY
-v <local_path>:/dataMount local directory to container
--device=/dev/driAccess to GPU/graphics device
--group-add videoAdd to video group (graphics permissions)
--volume=/tmp/.X11-unix:/tmp/.X11-unixMount X11 socket
--env="DISPLAY=$DISPLAY"Set display environment variable
--env="QT_X11_NO_MITSHM=1"Avoid Qt application display issues
--name=<container_name>Assign name to container

Example Usage​

sudo docker run -it -v /home/user/workspace:/data \
--device=/dev/dri \
--group-add video \
--volume=/tmp/.X11-unix:/tmp/.X11-unix \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--name=ros_container \
ros:humble \
/bin/bash

Verify Mounted Directory​

Check mounted directory inside the container:

cd /data
ls -la

Environment Setup Inside Container​

Update Package Management System​

sudo apt update
sudo apt upgrade

Install Basic Tools​

Install Tmux​

apt install tmux

Tmux is a useful tool for managing multiple terminal sessions.

Install Git​

apt install git

Essential tool for version control systems.

Additional Package Examples​

# Editors
apt install vim nano

# Network tools
apt install curl wget net-tools

# Development tools
apt install build-essential cmake

Container Management​

Start Existing Container​

sudo docker start -ia <container_id>

Parameter explanation:

  • -i: Interactive mode
  • -a: Attach mode

Check Container Status​

Check running containers​

docker ps

Check all containers​

docker ps -a

Check available images​

docker images

Commonly Used Docker Commands​

Container Operations​

# Stop container
docker stop <container_id>

# Remove container
docker rm <container_id>

# Connect to container (if running)
docker exec -it <container_id> /bin/bash

# Check container logs
docker logs <container_id>

Image Operations​

# Remove image
docker rmi <image_id>

# Remove unused images
docker image prune

# Remove all unused resources
docker system prune

Troubleshooting​

Common Issues and Solutions​

  1. GUI applications don't display

    # Check X11 forwarding
    echo $DISPLAY

    # Check xhost settings
    xhost +local:
  2. Permission errors

    # Add user to docker group
    sudo usermod -aG docker $USER

    # Logout/login or
    newgrp docker
  3. Port access issues

    # Add port mapping when creating container
    docker run -p <host_port>:<container_port> ...

Best Practices​

Data Persistence​

Always use volume mounts for important data:

-v /host/data:/container/data

Resource Limits​

# Memory limit
--memory="2g"

# CPU limit
--cpus="1.5"

Network Configuration​

# Use custom network
docker network create mynetwork
docker run --network=mynetwork ...
For Efficient Development
  • Create development Dockerfiles with pre-installed necessary tools
  • Use Docker Compose to simplify multi-container management
  • Use .dockerignore files to reduce build time