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?

去回報
站長的博客
提個建議