Docker 装好了却访问不到服务?按五层证据定位问题

举报
yd_237867988 发表于 2026/10/26 09:19:11 2026/10/26
【摘要】 把客户端、Docker daemon、容器、应用响应和外部网络分开验证,通过状态、日志、端口映射与 curl 结果定位 Linux 云服务器上的容器访问问题。

排查 Docker 服务时,先把“客户端能执行”“守护进程可连接”“容器在运行”“应用有响应”“外部网络可达”分开验证,能减少无效重装和反复放开安全组的操作。本文给出一条适用于 Linux 云服务器的检查路径;命令输出中的容器名需替换为自己的实际名称。

1. 看客户端与服务端,不只看版本号

docker --version
docker version

第一条只能说明客户端程序存在。第二条要同时关注 Client 与 Server 部分。若出现无法连接 Docker daemon 的错误,先检查服务和当前连接目标,而不是重新下载镜像。

systemctl status docker --no-pager
journalctl -u docker.service -n 80 --no-pager
printf "%s\n" "$DOCKER_HOST"

以上服务检查适用于由 systemd 管理的 Docker Engine。若使用 rootless 模式或 Docker Desktop,应按对应安装方式检查。分享日志前应移除令牌、账号和内部地址等信息。

2. 镜像存在,不代表容器启动成功

docker images
docker ps -a
docker logs --tail 80 web
docker inspect --format '{{.State.Status}} exit={{.State.ExitCode}} error={{.State.Error}}' web

镜像是运行模板,容器才是进程实例。Exited 状态需要结合退出码与日志判断;Up 状态也只说明主进程尚在运行,不能单独证明应用已经就绪。不要因为日志为空就判定没有错误,应用可能没有把日志写到标准输出。

3. 核对端口映射的方向

docker port web

-p 8080:80 的含义是宿主机 8080 端口映射到容器 80 端口。浏览器应访问宿主机的 8080,而不是把容器端口直接当作云服务器端口。Dockerfile 中的 EXPOSE 也不能代替实际发布端口。

4. 先在云服务器内部测试

curl -v --connect-timeout 3 --max-time 10 http://127.0.0.1:8080/

请按实际映射端口修改 URL。连接被拒绝、连接超时、HTTP 404 分别指向不同线索:没有可接受连接的服务、链路未能及时建立、HTTP 服务已响应但资源路径不匹配。它们都不能只凭单条结果确定根因。

如果本机测试成功、外部失败,再检查公网 IP、安全组入站规则、主机防火墙和应用绑定地址。按需开放指定业务端口,限制来源;不要为排查一个网页服务而放开全部端口。

5. 把结论写成可复查的证据

记录检查时间、容器名、状态、端口映射和本机 HTTP 测试结果。只在确认配置问题后修改对应项,每次只改一处并重测。这样即使远程会话断开,也能从上一个已验证的环节继续,而不必从重装开始。

参考资料:

  • Docker 官方文档:Troubleshooting the Docker daemon(Docker 官方文档站,路径 engine/daemon/troubleshoot/)
  • Docker 官方文档:Read the daemon logs(Docker 官方文档站,路径 engine/daemon/logs/)
  • Docker 官方文档:Port publishing and mapping(Docker 官方文档站,路径 engine/network/port-publishing/)

本文由 AI 辅助整理,示例用于说明排查方法,不代表已在所有系统和版本上验证。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。