Ubuntu Docker如何进行故障排查
导读:Ubuntu Docker故障排查指南 一、基础状态检查 确认Docker服务运行状态 使用systemctl status docker查看Docker服务是否处于active (running 状态。若未运行,执行sudo syste...
Ubuntu Docker故障排查指南
一、基础状态检查
- 确认Docker服务运行状态
使用systemctl status docker
查看Docker服务是否处于active (running)
状态。若未运行,执行sudo systemctl start docker
启动服务;若启动失败,继续查看服务日志(journalctl -u docker.service
)定位具体原因(如依赖缺失、配置错误)。 - 检查容器状态
运行docker ps -a
查看所有容器(包括已停止的),重点关注Exited(异常退出)或Created(创建但未启动)状态的容器。记录容器ID或名称,用于后续日志分析。
二、日志分析定位问题
- 查看Docker守护进程日志
使用journalctl -u docker.service
查看Docker服务的详细日志,可获取服务启动、容器运行期间的系统级错误(如端口冲突、磁盘空间不足、镜像拉取失败)。 - 查看容器日志
对目标容器执行docker logs < container_id>
,查看容器内应用的输出日志(如应用崩溃、配置文件缺失、依赖未安装)。若容器已停止,可通过--tail
和-f
参数查看最近日志或实时跟踪(例如docker logs --tail 50 -f < container_id>
)。
三、常见故障场景及解决方法
1. 容器无法启动
- 检查启动命令与配置:若容器因
Entrypoint
或CMD
错误无法启动,可通过docker inspect < container_id>
查看配置,或用docker run -it --entrypoint /bin/sh < image_name>
以交互模式进入容器,手动执行启动命令(如/app/start.sh
),定位具体错误(如命令不存在、参数错误)。 - 检查端口冲突:使用
ss -tulpn | grep < 端口号>
或netstat -tuln | grep < 端口号>
查看宿主机端口占用情况。若端口已被占用,修改docker run
命令中的-p
参数(例如将-p 80:80
改为-p 8080:80
)或停止占用端口的服务。 - 检查资源限制:通过
docker stats
查看容器CPU、内存使用情况,若资源耗尽,调整docker run
中的--memory
(内存限制)、--cpus
(CPU限制)参数,或清理无用容器(docker rm < container_id>
)、镜像(docker rmi < image_id>
)释放资源。
2. 网络连接问题
- 检查容器网络配置:使用
docker inspect < container_id>
查看容器的网络模式(如bridge
、host
)、IP地址、网关设置。若使用自定义网络,执行docker network inspect < network_name>
确认网络配置正确(如子网、网关)。 - 测试宿主机网络:在宿主机上执行
ping 8.8.8.8
(测试外网连通性)、ping www.baidu.com
(测试DNS解析),若宿主机无法联网,先解决宿主机网络问题(如网线松动、Wi-Fi断开、路由器配置错误)。 - 检查防火墙与DNS:
- 防火墙:使用
sudo ufw status
查看Ubuntu防火墙状态,若开启,添加允许Docker端口的规则(例如sudo ufw allow 80/tcp
允许HTTP流量);临时关闭防火墙测试(sudo ufw disable
),确认是否为防火墙导致。 - DNS:检查
/etc/docker/daemon.json
中的dns
配置(例如{ "dns": ["8.8.8.8", "8.8.4.4"]}
),修改后重启Docker(sudo systemctl restart docker
);或在启动容器时通过--dns
参数指定DNS(例如docker run --dns 8.8.8.8 < image_name>
)。
- 防火墙:使用
3. 镜像与容器配置问题
- 拉取镜像失败:若
docker pull < image_name>
失败,检查网络连接(如代理设置、DNS解析),或更换镜像源(修改/etc/docker/daemon.json
中的registry-mirrors
,例如{ "registry-mirrors": ["https://registry.docker-cn.com"]}
),然后重启Docker。 - Dockerfile错误:若构建镜像时失败(
docker build
命令报错),检查Dockerfile语法(如RUN
、COPY
指令路径是否正确)、依赖是否安装完整(如apt-get update
后未安装所需软件包),或使用docker build --no-cache
重新构建(避免缓存导致的问题)。
四、高级排查工具
- 进入容器调试
使用docker exec -it < container_id> /bin/bash
(或/bin/sh
,取决于容器内Shell类型)进入容器,手动执行命令(如ls
查看目录、cat /etc/hosts
查看主机名解析、ping
测试网络),模拟应用运行环境,定位问题。 - 重建Docker网络
若网络问题持续存在(如容器无法互通、无法访问外网),重启Docker服务(sudo systemctl restart docker
)重建默认网络(如bridge
网络);或删除并重新创建自定义网络(docker network rm < network_name>
→docker network create < network_name>
)。 - 使用第三方工具
- 监控工具:部署Prometheus+Grafana监控Docker容器的资源使用情况(CPU、内存、磁盘、网络),及时发现资源瓶颈。
- 日志管理:使用Fluentd+ELK(Elasticsearch+Logstash+Kibana)收集、分析Docker日志,快速定位日志中的关键字(如
error
、failed
)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Docker如何进行故障排查
本文地址: https://pptw.com/jishu/722443.html