跳到主要内容

Start a Docker Container

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