直接看日志,再查配置、资源和网络是最高效排错方式:先用docker logs查看eaddrinuse、enoent、permission denied等错误;再通过docker inspect验证docker-compose.yml或daemon.json中的volumes、ports配置;接着用docker stats和df -h检查内存、cpu、磁盘资源;最后用curl、ping和iptables -t nat -l docker排查网络连通性。

直接看日志,再查配置、资源和网络——这是最高效的方式。
怎么看容器日志
日志是第一手线索。容器启动失败或运行异常时,先执行:docker logs
重点关注三类错误:
-
EADDRINUSE:端口被占,检查宿主机是否已有进程监听同一端口 -
ENOENT或No such file or directory:路径不存在,确认挂载卷的本地路径真实存在且权限正确 -
Permission denied:文件或目录权限不足,尤其注意 config.json、证书等敏感文件的读写权限
怎么看配置是否出错
配置问题常藏在 docker-compose.yml 或 daemon.json 里:
- 检查
volumes路径拼写和冒号分隔是否规范,比如./config:/app/config:ro中冒号前后不能有空格 - 验证
ports映射格式,-p 8080:3000表示把宿主机 8080 映射到容器 3000,别写反或漏写-p - 用
docker inspect查看实际挂载、网络、环境变量,比配置文件更真实
怎么看资源够不够
容器“莫名退出”或“卡住”,大概率是资源瓶颈:
- 磁盘:
df -h /var/lib/docker,若使用率超95%,清理无用镜像或卷:docker system prune -af --volumes - 内存:
docker stats --no-stream查看实时占用;若容器频繁重启,可能是 OOM,需加mem_limit限制 - CPU:
docker top看进程 CPU 占用,避免单个应用吃满核心
怎么看网络通不通
服务“跑着但访问不了”,重点排查网络链路:
- 宿主机能否访问:
curl http://localhost:映射端口 - 容器内能否访问自身服务:
docker exec -it curl http://localhost:内部端口 - 容器间能否互通:同网络下
docker exec -it 容器A ping 容器B+curl http://容器B:端口 - 注意 iptables 的
DOCKER-USER链,它可能拦截容器间 TCP 流量(尤其自定义网络),必要时加放行规则
不复杂但容易忽略。











