核心是用docker exec启动新进程而非登录系统;需先用docker ps确认容器运行状态,再执行docker exec -it /bin/bash(完整镜像)或/bin/sh(精简镜像),退出用exit或ctrl+d不影响容器运行。

进入和调试 Docker 容器,核心是用 docker exec 启动新进程,而不是“登录”系统。容器本身没有传统意义上的用户会话,所有操作都基于进程级交互。
查容器状态再动手
进容器前,先确认它在运行:
-
列出正在运行的容器:运行
docker ps,关注NAMES或CONTAINER ID -
看全量列表(含已退出):用
docker ps -a,避免误以为容器还活着 -
快速找某个服务:比如查 nginx 容器,可加过滤
docker ps --filter name=nginx
最常用:docker exec 交互式进入
这是日常调试的主力命令,格式统一:
-
docker exec -it /bin/bash—— 大多数 Debian/Ubuntu 镜像可用 -
docker exec -it /bin/sh—— Alpine、Distroless 等精简镜像必须用sh - 退出时直接输
exit或按Ctrl+D,不影响容器运行
不进 shell,直接跑命令
适合查看日志、检查配置、触发重启等一次性操作:
-
docker exec nginx cat /etc/nginx/nginx.conf—— 查配置内容 -
docker exec mysql mysqldump -uroot -p'123' mydb > backup.sql—— 导出数据库(注意引号和重定向在宿主机生效) -
docker exec -u www-data nginx ls -l /usr/share/nginx/html—— 指定用户执行,避免权限问题
遇到进不去的情况怎么处理
常见卡点及应对方式:
-
容器已停止:先
docker start,再 exec;或用docker run -it --rm --volumes-from /bin/sh挂载原数据调试 -
镜像没 bash/sh:如 Distroless 镜像,无法 exec 进入。此时应改用
docker cp拷文件出来分析,或重建镜像时加入调试工具 -
连不上终端(tty 错误):确认容器启动时没加
--detach=false类参数;部分守护进程模式容器需显式指定-t分配伪终端











