570 字
3 分钟
Docker 容器不退出与调试命令速查
这篇用来复制 Docker 容器保活和调试命令。
让容器不退出
最常用:
docker run -d --name debug-container IMAGE tail -f /dev/null或者:
docker run -d --name debug-container IMAGE sleep infinity如果镜像里没有 sleep infinity,用:
docker run -d --name debug-container IMAGE sh -c "while true; do sleep 3600; done"交互式进入容器
进入正在运行的容器:
docker exec -it CONTAINER bash如果没有 bash:
docker exec -it CONTAINER sh以 root 用户进入:
docker exec -it -u root CONTAINER bash直接启动并进入临时容器
docker run --rm -it IMAGE bash如果没有 bash:
docker run --rm -it IMAGE sh挂载当前目录:
docker run --rm -it -v "$PWD":/work -w /work IMAGE bash容器退出后查看原因
查看所有容器:
docker ps -a查看日志:
docker logs CONTAINER查看退出码:
docker inspect -f '{{.State.ExitCode}}' CONTAINER查看错误信息:
docker inspect -f '{{.State.Error}}' CONTAINER查看状态:
docker inspect -f '{{.State.Status}}' CONTAINER重新启动已退出容器
docker start CONTAINER启动并附加到终端:
docker start -ai CONTAINER停止和删除容器
停止:
docker stop CONTAINER删除:
docker rm CONTAINER强制删除运行中的容器:
docker rm -f CONTAINER常用 docker run 模板
后台运行并指定名称:
docker run -d --name app IMAGE映射端口:
docker run -d --name app -p 8080:80 IMAGE设置环境变量:
docker run -d --name app -e NODE_ENV=production IMAGE挂载目录:
docker run -d --name app -v "$PWD":/app IMAGE指定工作目录:
docker run -d --name app -w /app IMAGE指定网络:
docker run -d --name app --network my-network IMAGE容器退出自动删除:
docker run --rm IMAGEDocker Compose 调试
进入服务容器:
docker compose exec SERVICE bash如果没有 bash:
docker compose exec SERVICE sh临时启动服务并进入:
docker compose run --rm SERVICE bash只启动某个服务:
docker compose up -d SERVICE重启某个服务:
docker compose restart SERVICE常用参数解释
-d:后台运行容器。
--name:指定容器名称。
-it:交互式终端,常用于进入 shell。
--rm:容器退出后自动删除。
-v:挂载目录或 volume。
-w:指定容器内工作目录。
-p 8080:80:把宿主机 8080 映射到容器 80。
-e KEY=value:设置环境变量。
--network:指定容器加入的 Docker 网络。
tail -f /dev/null:持续等待,不主动退出,常用于调试保活。
sleep infinity:无限睡眠,让容器保持运行。
exec:在运行中的容器里执行命令。
start -ai:启动已存在容器并附加输入输出。
Docker 容器不退出与调试命令速查
https://r-gc.github.io/posts/notes/docker/docker-container-keepalive-debug/