EasyDebug.NET

Docker 常用命令速查表

镜像、容器、网络、卷、Compose 等九类命令,含可直接套用的示例

共 92 条命令

docker images镜像

列出本地镜像及大小

docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
docker pull nginx:alpine镜像

拉取镜像,不写标签默认取 latest

docker pull nginx:1.27-alpine
docker build -t app:1.0 .镜像

按当前目录的 Dockerfile 构建镜像

docker build -t registry.example.com/app:1.0 .
docker build --no-cache -t app:1.0 .镜像

跳过构建缓存重建,排查缓存导致的怪问题

docker build --no-cache -t app:1.0 .
docker build -f Dockerfile.prod .镜像

指定非默认文件名的 Dockerfile

docker build -f docker/Dockerfile.prod -t app:prod .
docker build --target builder -t app:debug .镜像

只构建到指定阶段,多阶段构建排错常用

docker build --target builder -t app:debug .
docker buildx build --platform linux/amd64,linux/arm64 -t app:1.0 .镜像

一次构建多架构镜像并推送

docker buildx build --platform linux/amd64,linux/arm64 --push -t app:1.0 .
docker tag app:1.0 registry.example.com/app:1.0镜像

给镜像打上仓库地址,推送前必做

docker tag app:1.0 registry.example.com/team/app:1.0
docker rmi <image>镜像

删除镜像,被容器占用时需先删容器

docker rmi app:1.0
docker history <image>镜像

查看镜像分层与每层大小,定位体积来源

docker history --no-trunc app:1.0
docker save -o app.tar app:1.0镜像

把镜像导出为 tar 文件,离线传输用

docker save -o app.tar app:1.0
docker load -i app.tar镜像

从 tar 文件载入镜像

docker load -i app.tar
docker inspect <image>镜像

查看镜像元数据:环境变量、入口点、暴露端口

docker inspect --format "{{.Config.Env}}" nginx
docker run -d --name web -p 8080:80 nginx容器生命周期

后台运行并映射端口,最常用的启动形式

docker run -d --name web -p 8080:80 nginx:alpine
docker run -it --rm alpine sh容器生命周期

临时交互容器,退出即自动删除

docker run -it --rm alpine sh
docker run -v pgdata:/var/lib/postgresql/data postgres容器生命周期

挂载具名卷,容器删了数据还在

docker run -d --name pg -v pgdata:/var/lib/postgresql/data postgres:16
docker run -e TZ=Asia/Shanghai -e ENV=prod app:1.0容器生命周期

传入环境变量,时区不对先查这里

docker run -d -e TZ=Asia/Shanghai -e SPRING_PROFILES_ACTIVE=prod app:1.0
docker run --network host nginx容器生命周期

直接用宿主网络,不走端口映射

docker run -d --network host nginx
docker run --restart unless-stopped -d app:1.0容器生命周期

设置重启策略,机器重启后自动拉起

docker run -d --restart unless-stopped app:1.0
docker run --memory 512m --cpus 1.5 app:1.0容器生命周期

限制内存与 CPU,防单个容器拖垮宿主机

docker run -d --memory 512m --cpus 1.5 app:1.0
docker ps容器生命周期

只看运行中的容器

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
docker ps -a容器生命周期

列出全部容器,含已退出的

docker ps -a --filter "status=exited"
docker start <ct>容器生命周期

启动已存在的容器,配置原样保留

docker start web
docker stop <ct>容器生命周期

优雅停止:先发 SIGTERM,超时才 SIGKILL

docker stop -t 30 web
docker restart <ct>容器生命周期

重启容器,改了挂载配置后常需要

docker restart web
docker rm <ct>容器生命周期

删除已停止的容器

docker rm web-old
docker rm -f <ct>容器生命周期

强制删除运行中的容器

docker rm -f web
docker rename <old> <new>容器生命周期

重命名容器

docker rename web web-01
docker update --memory 1g <ct>容器生命周期

不重建容器就调整资源限制

docker update --memory 1g --memory-swap 1g web
docker attach <ct>容器生命周期

附着到容器主进程,Ctrl+C 会连带停掉容器,一般用 exec 更安全

docker attach web
docker exec -it web sh进入容器与文件互传

进入运行中的容器,镜像里没有 bash 时用 sh

docker exec -it web /bin/sh
docker exec -u root -it web sh进入容器与文件互传

以 root 身份进入,容器内用户无权限时用

docker exec -u 0 -it web sh
docker exec web ls -l /etc/nginx进入容器与文件互传

在容器里执行单条命令,不进交互

docker exec web nginx -t
docker exec web cat /etc/resolv.conf进入容器与文件互传

容器内 DNS 配置,解析失败先看它

docker exec web cat /etc/resolv.conf
docker cp ./app.conf web:/etc/nginx/conf.d/进入容器与文件互传

从宿主机复制文件进容器

docker cp ./app.conf web:/etc/nginx/conf.d/app.conf
docker cp web:/var/log/app.log ./进入容器与文件互传

把容器内文件复制到宿主机

docker cp web:/var/log/app.log ./app.log
docker diff <ct>进入容器与文件互传

列出容器内相对镜像的文件改动

docker diff web
docker export <ct> -o rootfs.tar进入容器与文件互传

导出容器文件系统(不含镜像历史与元数据)

docker export web -o web-rootfs.tar
docker network ls网络

列出所有网络

docker network ls
docker network create app-net网络

创建自定义桥接网络

docker network create --driver bridge app-net
docker network inspect app-net网络

查看网络内各容器的 IP,排查互访问题

docker network inspect --format "{{range .Containers}}{{.Name}} {{.IPv4Address}}{{end}}" app-net
docker network connect app-net <ct>网络

把一个运行中的容器接进网络

docker network connect app-net web
docker network disconnect app-net <ct>网络

把容器从网络断开

docker network disconnect app-net web
docker network rm app-net网络

删除网络,仍有容器连接时需先断开

docker network rm app-net
docker port <ct>网络

查看容器的端口映射关系

docker port web
docker run --network app-net --name api app:1.0网络

加入自定义网络后可用容器名当主机名互访

docker run -d --network app-net --name api app:1.0
docker volume ls数据卷

列出所有数据卷

docker volume ls -f dangling=true
docker volume create pgdata数据卷

创建具名卷,便于备份与迁移

docker volume create pgdata
docker volume inspect pgdata数据卷

查看卷在宿主机的实际路径

docker volume inspect --format "{{.Mountpoint}}" pgdata
docker run -v $(pwd)/data:/data app:1.0数据卷

绑定挂载宿主机目录,改文件立即生效

docker run -d -v $(pwd)/data:/app/data app:1.0
docker run -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro nginx数据卷

只读挂载配置文件,防止容器改宿主文件

docker run -d -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro nginx
docker volume rm pgdata数据卷

删除数据卷,卷被占用时需先删容器

docker volume rm pgdata
docker volume prune数据卷

清理无容器使用的悬空卷

docker volume prune -f
docker inspect -f "{{.Mounts}}" <ct>数据卷

查看容器实际挂载了什么,排查配置没生效

docker inspect -f "{{json .Mounts}}" web
docker compose up -dCompose

按 compose.yaml 后台启动全部服务

docker compose up -d
docker compose up -d --buildCompose

先重新构建镜像再启动,改了 Dockerfile 要用它

docker compose up -d --build
docker compose downCompose

停止并删除容器与网络,数据卷保留

docker compose down
docker compose down -vCompose

连数据卷一起删,慎用(数据会没)

docker compose down -v --remove-orphans
docker compose psCompose

查看本项目容器状态

docker compose ps -a
docker compose logs -f apiCompose

跟踪某个服务的日志

docker compose logs -f --tail 100 api
docker compose exec api shCompose

进入某个服务的容器

docker compose exec api /bin/sh
docker compose restart apiCompose

只重启指定服务,不影响其他服务

docker compose restart api
docker compose pullCompose

拉取配置里引用的最新镜像

docker compose pull
docker compose configCompose

把 compose 文件展开成最终配置,校验语法与变量替换

docker compose config
docker compose up -d --scale web=3Compose

横向扩容到 3 个实例(不能再映射固定端口)

docker compose up -d --scale web=3
docker compose --profile debug upCompose

只启动某个 profile 下的服务

docker compose --profile debug up -d
docker login registry.example.com镜像仓库

登录私有仓库,凭据存在 ~/.docker/config.json

docker login registry.example.com -u ci
docker logout registry.example.com镜像仓库

退出登录并清除本地凭据

docker logout registry.example.com
docker push registry.example.com/app:1.0镜像仓库

推送镜像,必须先 tag 成仓库地址

docker push registry.example.com/team/app:1.0
docker search nginx镜像仓库

在 Docker Hub 搜索镜像

docker search --limit 10 nginx
docker manifest inspect nginx:latest镜像仓库

查看镜像支持哪些架构

docker manifest inspect nginx:latest
docker buildx imagetools inspect app:1.0镜像仓库

查看远程多架构镜像的清单详情

docker buildx imagetools inspect registry.example.com/app:1.0
docker system df清理

查看镜像、容器、卷、构建缓存各占多少磁盘

docker system df -v
docker system prune清理

清理停止的容器、未使用网络与悬空镜像

docker system prune -f
docker system prune -a --volumes清理

连未使用镜像与数据卷一起清,危险操作

docker system prune -a --volumes -f
docker builder prune清理

只清构建缓存,磁盘被缓存吃满时用

docker builder prune -a -f
docker container prune清理

删除所有已退出的容器

docker container prune -f --filter "until=24h"
docker image prune清理

删除悬空镜像;加 -a 连未使用的都删

docker image prune -a -f
docker network prune清理

清理无容器使用的网络

docker network prune -f
docker rm -v $(docker ps -aq)清理

批量删除全部容器并连带匿名卷

docker rm -f -v $(docker ps -aq)
docker logs -f --tail 100 web排错与资源

跟踪日志尾部,排错第一站

docker logs -f --tail 100 web
docker logs --since 10m web排错与资源

只看最近十分钟的日志

docker logs --since 10m --timestamps web
docker inspect -f "{{.State.Status}}" web排错与资源

取容器状态,适合写进脚本判断

docker inspect -f "{{.State.Status}} exit={{.State.ExitCode}}" web
docker inspect -f "{{.State.ExitCode}}" <ct>排错与资源

查看退出码,137 多为被 OOM 杀掉

docker inspect -f "{{.State.ExitCode}}" web
docker stats排错与资源

实时查看各容器 CPU、内存、网络占用

docker stats --no-stream
docker top <ct>排错与资源

查看容器内运行的进程,确认主进程是否还在

docker top web
docker events排错与资源

实时监听 Docker 事件,看容器何时被杀或重启

docker events --filter "container=web"
docker run -it --rm --entrypoint sh app:1.0排错与资源

覆盖入口点进镜像排查,确认容器为什么起不来

docker run -it --rm --entrypoint sh app:1.0
docker run -it --rm --network container:web nicolaka/netshoot排错与资源

借用排错镜像共享目标容器网络,测连通性

docker run -it --rm --network container:web nicolaka/netshoot
docker build --progress=plain -t app:1.0 .排错与资源

输出完整构建日志,定位失败的构建步骤

docker build --progress=plain --no-cache -t app:1.0 .
docker inspect -f "{{json .HostConfig.RestartPolicy}}" <ct>排错与资源

确认重启策略是否真的生效

docker inspect -f "{{json .HostConfig.RestartPolicy}}" web
docker diff <ct> | head -50排错与资源

快速看容器里被动过哪些文件,排查被谁改了配置

docker diff web | head -50

这个工具不好用,或者遇到 bug?

去反馈
站长的博客
提个建议