Docker容器端口映射后主机浏览器访问提示连接拒绝如何解决
Docker容器端口映射访问拒绝排查方案
- 第一步:确认端口映射与端口监听状态
执行以下命令验证82端口是否被Docker正确监听:
正常输出应显示sudo netstat -tulpn | grep 82docker-proxy进程监听0.0.0.0:82。如果无对应输出,说明端口映射未生效,先检查容器是否处于运行状态:
若容器未运行,查看容器启动日志定位退出原因:sudo docker pssudo docker logs 容器ID - 第二步:验证容器内Apache服务状态
进入运行中的容器内部验证服务可用性:
容器内执行以下命令,确认Apache正常返回内容且监听地址为0.0.0.0:80:sudo docker exec -it 容器ID /bin/bash
注意:Apache默认若监听127.0.0.1则无法被宿主机访问,需修改Apache配置文件将监听地址改为0.0.0.0curl 127.0.0.1:80 ss -tulpn | grep 80 - 第三步:排除防火墙/安全组拦截
先在slave节点本地执行curl 127.0.0.1:82,如果本地访问正常、远程IP访问失败,说明是节点的防火墙规则拦截了82端口:
以ufw防火墙为例,开放82端口入站规则:
同时检查云服务器安全组(若为云主机)是否开放82端口的入站权限。sudo ufw allow 82/tcp - 第四步:修正容器启动命令
你当前的启动命令同时添加了-it(交互式终端参数)与-d(后台运行参数)存在冲突,建议修改为:
额外注意:确认Dockerfile中Apache的启动命令为前台运行模式,若使用后台启动命令会导致容器启动后直接退出,例如Apache官方镜像的启动命令为sudo docker run -p 82:80 -d --name test-apache testapache2-foreground,不要替换为service apache2 start这类后台启动指令 - 第五步:确认节点匹配
验证你执行Docker命令的节点与你访问的slave节点IP为同一台机器,避免Jenkins任务调度到其他节点执行导致访问错IP。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

