Docker 速查手册
·
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 官方文档
- Dockerfile 最佳实践
- NVIDIA Container Toolkit
- ROS Docker 镜像
- PyTorch Docker 镜像
- Docker Slim 镜像瘦身
- Dive 镜像分析
相关笔记
- [[技术笔记/Docker/Docker详细笔记]] — Docker 完整笔记
- [[技术笔记/系统/WSL2]] — WSL2(Docker 运行环境)
- [[技术笔记/系统/📘 WSL 2 完整指南:图形化版本 + 微软商店安装(整合终极版)]] — WSL2 图形化指南
- [[技术笔记/视觉环境搭建/Ubuntu22.04.2视觉开发环境搭建全流程]] — Ubuntu 环境搭建
- [[技术笔记/ros2/基础/ROS2工作空间核心笔记]] — ROS2 Docker 开发环境
更多推荐



所有评论(0)