docker-compose exec是最直接进入容器的方式,需用docker-compose.yml中定义的服务名(非容器名),如api或db;主流镜像用/bin/bash,Alpine等精简镜像用/bin/sh;进容器后可查进程、环境变量、文件权限及本地连通性,也可不进容器直接exec执行单条命令排查问题。

用 docker-compose exec 进入指定容器是最直接、最常用的方式,它不干扰原服务进程,适合绝大多数调试排查场景。
确认目标服务名
先看 docker-compose.yml 中定义的服务名(不是容器名),比如:
services:-
api:← 这就是服务名,后续命令要用它 -
db: -
nginx:
运行 docker-compose ps 可验证服务是否在运行,同时看到实际生成的容器名(通常为 [项目名]_[服务名]_1)。
执行 exec 进入容器
语法统一为:
-
docker-compose exec -it <服务名> /bin/bash(适用于 Ubuntu/Debian/CentOS 等主流镜像) -
docker-compose exec -it <服务名> /bin/sh(适用于 Alpine、Distroless 或精简镜像)
例如:
docker-compose exec -it api /bin/bashdocker-compose exec -it db /bin/sh
成功后即获得一个独立终端,容器内主进程照常运行。
进容器后快速排查要点
登录后建议按顺序检查这几项:
-
进程状态:运行
ps aux | grep -v grep,确认主程序(如 node、java、python)是否在 PID 1 或预期位置 -
环境变量:运行
env | grep -i "host\|port\|env",验证配置是否注入正确 -
文件路径与权限:检查关键目录是否存在、可读写,如
ls -l /app、cat /etc/nginx/conf.d/default.conf -
本地连通性:用
curl -v http://localhost:3000/health或telnet localhost 5432测试服务是否响应
不进容器也能查关键信息
很多问题无需登录,用 exec 直接执行单条命令更高效:
- 查日志尾部:
docker-compose exec api tail -n 20 /var/log/app.log - 看端口监听:
docker-compose exec api netstat -tuln | grep :3000 - 读配置文件:
docker-compose exec nginx cat /etc/nginx/nginx.conf - 测试依赖连通:
docker-compose exec api curl -s http://db:5432(注意用服务名作 host)


















