使用docker run -it可直接启动并进入交互式容器,其中-i保持标准输入、-t分配伪终端,二者缺一不可;镜像无bash时改用/bin/sh,调试推荐加--rm自动清理。

创建容器时直接启用交互式伪终端,是调试内部程序最直接的方式——不用等容器跑起来再进,从启动那一刻就获得可操作的 shell 环境。
用 docker run -it 启动带交互终端的容器
这是最常用也最有效的调试起点。命令结构简单,但两个参数缺一不可:
- -i(interactive):保持标准输入打开,允许你敲命令、传参数、读取用户输入
- -t(tty):分配伪终端,让输出格式正常(比如支持颜色、光标移动、清屏),避免乱码或命令无法回显
示例:
docker run -it --name debug-app ubuntu:22.04 /bin/bash执行后立刻进入容器内 bash,你可以立即运行 ps aux 查进程、cat /proc/self/cgroup 看资源限制、或手动启动你的应用二进制文件观察报错。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
镜像没 bash?换用 sh 或指定入口点
很多精简镜像(如 alpine、distroless)默认不带 /bin/bash,强行使用会报错 “No such file or directory”。这时要主动适配:
- 改用
/bin/sh:docker run -it alpine /bin/sh - 查镜像默认 shell:docker inspect alpine | grep -i shell
- 覆盖 entrypoint 调试:docker run -it --entrypoint /bin/sh nginx -c "ls -l /usr/share/nginx/html"
调试时需要保留容器状态
交互式运行的容器退出(输入 exit 或 Ctrl+D)后默认停止。若想反复进入调试,建议加 --rm 避免残留,或命名后复用:
- 临时调试(用完即删):docker run -it --rm python:3.11 sh -c "python -c 'print(1/0)'"
- 长期调试(留名复用):docker run -it --name my-debug python:3.11,之后可用 docker exec -it my-debug /bin/sh 反复进入
权限与用户上下文别忽略
有些程序以非 root 用户运行,直接进 root shell 可能绕过权限问题,掩盖真实异常。调试时尽量模拟实际运行环境:
- 指定用户启动:docker run -it --user 1001:1001 node:18 npm start
- 进容器时切用户:docker exec -it --user www-data my-app /bin/sh
- 检查当前用户:
id、whoami、ls -l /app看文件属主是否匹配










