Docker 速查手册

视觉开发常用命令速查 | 更新: 2026-06-05

快速开始(5分钟上手)

# 1. 拉取一个带 CUDA 的镜像
docker pull nvidia/cuda:12.2.0-base-ubuntu22.04

# 2. 验证 GPU 可用
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

# 3. 启动一个交互式容器,挂载当前目录
docker run -it --gpus all \
  -v $(pwd):/workspace \
  --shm-size=4g \
  nvidia/cuda:12.2.0-base-ubuntu22.04 bash

# 4. 容器内安装 Python + OpenCV
apt-get update && apt-get install -y python3 python3-pip libgl1-mesa-glx
pip3 install opencv-python-headless numpy

# 5. 退出容器
exit

镜像操作速查

操作 命令
拉取镜像 docker pull <image>:<tag>
列出本地镜像 docker images
构建镜像 docker build -t <name>:<tag> .
指定 Dockerfile 构建 docker build -f Dockerfile.gpu -t <name> .
不用缓存构建 docker build --no-cache -t <name> .
给镜像打标签 docker tag <src> <dst>
推送镜像 docker push <image>
删除镜像 docker rmi <image>
删除悬空镜像 docker image prune
删除所有未使用镜像 docker image prune -a
查看镜像层 docker history <image>
导出镜像 docker save -o image.tar <image>
导入镜像 docker load -i image.tar
查看磁盘占用 docker system df
清理所有无用资源 docker system prune -a

容器操作速查

操作 命令
创建并进入 docker run -it --name <name> <image> bash
后台运行 docker run -d --name <name> <image>
运行后自动删除 docker run --rm <image> <cmd>
查看运行中容器 docker ps
查看所有容器 docker ps -a
进入运行中容器 docker exec -it <container> bash
在容器中执行命令 docker exec <container> <cmd>
查看日志 docker logs -f <container>
查看最后 N 行日志 docker logs --tail 100 <container>
停止容器 docker stop <container>
启动已停止容器 docker start <container>
重启容器 docker restart <container>
删除容器 docker rm <container>
强制删除 docker rm -f <container>
删除所有已停止容器 docker container prune
查看资源使用 docker stats
查看容器详情 docker inspect <container>
复制文件到容器 docker cp file.txt <container>:/path/
从容器复制文件 docker cp <container>:/path/file.txt ./
查看容器进程 docker top <container>

视觉开发速查

启动 GPU + X11 容器

# 宿主机授权 X11
xhost +local:docker

# 启动容器(支持 cv2.imshow / RViz / Gazebo)
docker run -it --rm \
  --gpus all \
  --name vision-dev \
  -e DISPLAY=$DISPLAY \
  -e QT_X11_NO_MITSHM=1 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v $HOME/.Xauthority:/root/.Xauthority \
  -v $(pwd)/src:/app/src \
  --net=host \
  --ipc=host \
  --shm-size=4g \
  nvidia/cuda:12.2.0-cudnn8-devel-ubuntu22.04 bash

# 容器内验证 GUI
apt-get update && apt-get install -y x11-apps
xeyes  # 弹出窗口即成功

# 用完后撤销授权
xhost -local:docker

启动 ROS2 容器

# ROS2 基础容器(支持 GUI + 多节点通信)
docker run -it --rm \
  --gpus all \
  --name ros2-dev \
  -e DISPLAY=$DISPLAY \
  -e ROS_DOMAIN_ID=0 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v $HOME/.Xauthority:/root/.Xauthority \
  -v $(pwd)/src:/ros2_ws/src \
  --net=host \
  --ipc=host \
  --shm-size=4g \
  ros:humble-desktop bash

# 容器内
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker  # 终端1
ros2 run demo_nodes_cpp listener  # 终端2(docker exec)

启动 OpenCV 开发容器

# 轻量 OpenCV 容器(无 GUI,纯处理)
docker run -it --rm \
  --gpus all \
  -v $(pwd):/workspace \
  --shm-size=2g \
  python:3.11-slim bash -c "
    pip install opencv-python-headless numpy &&
    cd /workspace && python3
  "

# 带 GUI 的 OpenCV 容器
docker run -it --rm \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v $HOME/.Xauthority:/root/.Xauthority \
  -v $(pwd):/workspace \
  --net=host \
  ubuntu:22.04 bash -c "
    apt-get update && apt-get install -y python3 python3-pip libgl1-mesa-glx &&
    pip3 install opencv-python &&
    cd /workspace && python3
  "

启动 PyTorch 训练容器

# PyTorch GPU 训练
docker run -d --gpus all \
  --name training \
  -v $(pwd)/datasets:/workspace/datasets:ro \
  -v $(pwd)/checkpoints:/workspace/checkpoints \
  -v $(pwd)/runs:/workspace/runs \
  --shm-size=8g \
  pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime \
  python3 train.py --epochs 100

# 查看训练日志
docker logs -f training

# 训练中进入容器
docker exec -it training bash

# 启动 TensorBoard
docker run -d -p 6006:6006 \
  -v $(pwd)/runs:/runs \
  tensorflow/tensorflow:latest-gpu \
  tensorboard --logdir=/runs --host=0.0.0.0

Dockerfile 模板

基础视觉开发模板

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1

# 系统依赖 + OpenCV 所需 GUI 库
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    python3 python3-pip python3-dev \
    libgl1-mesa-glx libglib2.0-0 \
    libsm6 libxext6 libxrender-dev \
    git wget curl vim \
    && rm -rf /var/lib/apt/lists/*

# Python 依赖
RUN pip3 install --no-cache-dir \
    opencv-python-headless \
    numpy \
    matplotlib \
    Pillow

WORKDIR /app
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . .

CMD ["python3"]

ROS2 + CUDA 模板

FROM nvidia/cuda:12.2.0-cudnn8-devel-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive

# ROS2 仓库和密钥
RUN apt-get update && apt-get install -y --no-install-recommends \
    software-properties-common curl gnupg lsb-release \
    && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
       -o /usr/share/keyrings/ros-archive-keyring.gpg \
    && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
       http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" \
       > /etc/apt/sources.list.d/ros2.list

# 安装 ROS2 + 视觉包
RUN apt-get update && apt-get install -y --no-install-recommends \
    ros-humble-desktop \
    ros-humble-cv-bridge \
    ros-humble-image-transport \
    ros-humble-vision-opencv \
    ros-humble-tf2-ros \
    ros-humble-pcl-ros \
    python3-colcon-common-extensions \
    python3-pip python3-colcon-mixin \
    libgl1-mesa-glx x11-apps \
    && rm -rf /var/lib/apt/lists/*

# Python 依赖
RUN pip3 install --no-cache-dir \
    opencv-python-headless numpy ultralytics

# ROS 工作空间
RUN mkdir -p /ros2_ws/src
WORKDIR /ros2_ws

# 自动 source 环境
RUN echo "source /opt/ros/humble/setup.bash" >> /root/.bashrc && \
    echo "source /ros2_ws/install/setup.bash" >> /root/.bashrc

CMD ["bash"]

深度学习训练模板

FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime

ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    libgl1-mesa-glx libglib2.0-0 git wget \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir \
    opencv-python-headless \
    ultralytics \
    tensorboard \
    albumentations \
    onnxruntime-gpu \
    tqdm

WORKDIR /workspace
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

# 默认启动训练
CMD ["python3", "train.py"]

docker-compose 模板

单容器视觉开发

version: '3.8'

services:
  dev:
    build: .
    image: vision-dev:latest
    container_name: vision-dev
    stdin_open: true
    tty: true
    environment:
      - DISPLAY=${DISPLAY}
      - QT_X11_NO_MITSHM=1
      - NVIDIA_VISIBLE_DEVICES=all
    volumes:
      - ./src:/app/src
      - ~/datasets:/app/datasets:ro
      - ~/checkpoints:/app/checkpoints
      - /tmp/.X11-unix:/tmp/.X11-unix
      - ${HOME}/.Xauthority:/root/.Xauthority
    network_mode: host
    ipc: host
    shm_size: '8gb'
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

多容器 ROS 系统

version: '3.8'

services:
  ros-master:
    image: ros:humble
    container_name: ros-master
    command: tail -f /dev/null
    environment:
      - ROS_DOMAIN_ID=0
    network_mode: host
    ipc: host

  camera:
    image: ros:humble
    container_name: camera-node
    command: >
      bash -c "source /opt/ros/humble/setup.bash &&
               ros2 run image_tools cam2image"
    environment:
      - ROS_DOMAIN_ID=0
    network_mode: host
    ipc: host
    depends_on:
      - ros-master

  vision:
    build:
      context: .
      dockerfile: Dockerfile.ros-vision
    container_name: vision-node
    command: >
      bash -c "source /opt/ros/humble/setup.bash &&
               source /ros2_ws/install/setup.bash &&
               ros2 run my_vision detect_node"
    environment:
      - ROS_DOMAIN_ID=0
      - NVIDIA_VISIBLE_DEVICES=all
    volumes:
      - ./src:/ros2_ws/src
    network_mode: host
    ipc: host
    shm_size: '8gb'
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    depends_on:
      - camera

  rviz:
    image: ros:humble-desktop
    container_name: rviz-node
    command: rviz2
    environment:
      - DISPLAY=${DISPLAY}
      - ROS_DOMAIN_ID=0
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - ${HOME}/.Xauthority:/root/.Xauthority
    network_mode: host
    ipc: host
    depends_on:
      - ros-master

常用调试命令

# 查看容器日志(实时跟踪)
docker logs -f <container>

# 进入运行中的容器
docker exec -it <container> bash

# 查看容器资源使用
docker stats

# 查看容器详细信息(网络、挂载、环境变量等)
docker inspect <container>

# 查看镜像构建历史(每层大小)
docker history <image>

# 在容器内检查 GPU
docker exec <container> nvidia-smi

# 测试网络连通性
docker exec <container> ping <other_container>
docker exec <container> curl http://host.docker.internal:8080

# 查看容器文件系统变更
docker diff <container>

# 清理无用资源
docker system prune -a --volumes

# 查看 Docker 系统信息
docker info

# 查看 Docker 版本
docker version

# 分析镜像层(需要安装 dive)
dive <image>

故障排除速查表

错误信息 原因 解决方案
libGL.so.1: cannot open shared object file 缺少 OpenGL 库 apt-get install -y libgl1-mesa-glx libglib2.0-0 或用 opencv-python-headless
cannot open display: :0 X11 未配置 xhost +local:docker + -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix
The function is not implemented... GTK+ OpenCV 需要 GUI 后端 安装 libgtk2.0-dev 或改用 opencv-python-headless
CUDA driver version is insufficient CUDA 版本 > 驱动支持 容器 CUDA 版本 <= nvidia-smi 显示的 CUDA Version
no kernel image is available for execution GPU 架构与 CUDA 编译不匹配 使用匹配的 CUDA 镜像版本
NVIDIA-SMI has failed 未安装 nvidia-container-toolkit sudo apt-get install -y nvidia-container-toolkit && sudo systemctl restart docker
Bus error / unable to open shared memory 共享内存不足(默认 64MB) --shm-size=8g--ipc=host
torch.multiprocessing: RuntimeError DataLoader 多进程共享内存不足 --shm-size=8g 或减少 num_workers
ROS 节点互相看不到 容器网络隔离导致 DDS 不通 --net=host --ipc=host 或设相同 ROS_DOMAIN_ID
镜像体积过大 安装了不必要的包/未清理缓存 多阶段构建 + --no-install-recommends + rm -rf /var/lib/apt/lists/*
构建缓存未生效 Dockerfile 指令顺序不对 COPY requirements.txt 放在 COPY . . 之前
容器内文件宿主机无法编辑 容器以 root 运行 docker build --build-arg UID=$(id -u) 创建匹配用户
容器内无法上网 DNS 配置问题 /etc/docker/daemon.json 配置 "dns": ["8.8.8.8"]
QT_X11_NO_MITSHM 警告 MIT-SHM 共享内存问题 -e QT_X11_NO_MITSHM=1 -e _X11_NO_MITSHM=1
docker compose 命令找不到 使用了旧版 docker-compose 安装 docker-compose-plugin 或用 docker compose(无连字符)
容器启动后立即退出 前台无持续运行的进程 tail -f /dev/null 或交互式 bash 保持运行

参考来源


相关笔记

  • [[技术笔记/Docker/Docker详细笔记]] — Docker 完整笔记
  • [[技术笔记/系统/WSL2]] — WSL2(Docker 运行环境)
  • [[技术笔记/系统/📘 WSL 2 完整指南:图形化版本 + 微软商店安装(整合终极版)]] — WSL2 图形化指南
  • [[技术笔记/视觉环境搭建/Ubuntu22.04.2视觉开发环境搭建全流程]] — Ubuntu 环境搭建
  • [[技术笔记/ros2/基础/ROS2工作空间核心笔记]] — ROS2 Docker 开发环境
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐