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}}" nginxdocker 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-netdocker 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}}" pgdatadocker 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}}" webdocker 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}}" webdocker inspect -f "{{.State.ExitCode}}" <ct>排錯與資源查看退出碼,137 多為被 OOM 殺掉
docker inspect -f "{{.State.ExitCode}}" webdocker 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}}" webdocker diff <ct> | head -50排錯與資源快速看容器裡被動過哪些文件,排查被誰改了配置
docker diff web | head -50
這個工具不好用,或者遇到 bug?
去回報