最常用、最安全的调试方式是用 docker exec -it 启动交互式 shell,不干扰原进程;适用于大多数镜像(/bin/bash 或 /bin/sh),可查进程、环境、文件、服务连通性,也可执行单条命令或结合 docker logs 快速定位问题。

最常用、最安全的方式是用 docker exec -it 启动一个新 shell,不干扰原进程,适合绝大多数调试场景。
用 docker exec 进入交互式 Shell
这是调试的首选方法,容器继续运行,你获得独立终端:
- 先查容器名或 ID:
docker ps - 进入容器 bash(适用于大多数 Linux 镜像):
docker exec -it <容器名或ID> /bin/bash - 若镜像没 bash(如 Alpine),改用:
docker exec -it <容器名或ID> /bin/sh - 进容器后可立刻执行:
ps aux看进程、env查环境变量、ls /app检查路径、curl -v http://localhost:8080测试服务连通性
快速执行单条命令,不进 Shell
适合验证配置、读日志、查状态,省去登录退出步骤:
- 查看某配置文件内容:
docker exec <容器名> cat /etc/nginx/conf.d/default.conf - 检查端口监听情况:
docker exec <容器名> netstat -tuln | grep :3000 - 导出日志片段到本地:
docker exec <容器名> tail -n 50 /var/log/app.log > local.log
查看实时日志辅助定位问题
日志常比进容器更快暴露异常,建议先看再进:
- 持续跟踪输出:
docker logs -f <容器名>(Ctrl+C 退出) - 只看最近错误行:
docker logs <容器名> 2>&1 | grep -i "error\|exception" - 带时间戳和行号便于比对:
docker logs -t --tail 100 <容器名>
其他方式的适用边界
不是不能用,但需注意风险或前提:
-
docker attach:直接连主进程 stdin/stdout,退出时若按 Ctrl+C 可能杀掉主程序;仅建议用于临时观察输出,安全退出要用 Ctrl+P → Ctrl+Q - 容器已停止:先
docker start <容器名>,再 exec;或用docker run -it --volumes-from <旧容器> <镜像> /bin/sh挂载原有卷调试 - 镜像极简无 shell:如 scratch 或某些 distroless 镜像,无法 exec 进入,应改用
docker inspect <容器名>查配置,或提前在构建时加入调试工具


















