Docker暴露端口服务器公网IP无法访问问题排查

环境:阿里云CentOS7 服务器

问题:当启动一个容器向外部暴露端口时,服务器公网IP:端口号无法访问

docker run -d --name nginx01 -p 90:80 nginx

一、未打开安全组策略

暴露给外部的端口需要打开对应的安全组设置,比如这里nginx对外暴露90端口,就需要添加如下的安全组配置
image-20210129121719277


二、防火墙开放端口未设置

首先查看防火墙是否开启,结果为not running表示未开启,则不是防火墙的问题,跳过

# 查看防火墙是否开启
firewall-cmd --state

如果显示running,则继续排查,查看防火墙开放的端口

# 查看防火墙所开放的端口
firewall-cmd --list-ports

[root@zsr ~]# firewall-cmd --list-ports
20/tcp 21/tcp 22/tcp 80/tcp 8888/tcp 39000-40000/tcp 3306/tcp 3306/udp 8080/tcp 8080/udp 3355/tcp

也可以用firewall-cmd --list-all查看防火墙的详细信息
image-20210129122719570
我这里的问题就是防火墙未开放90端口,所以要开放防火墙的对外暴露的端口

# 开放90端口(--premanent表示永久添加)
firewall-cmd --permanent --add-port=90/tcp

# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

添加完成后再次查看就可以看到90端口被开放
image-20210129122637843


三、没有启用IP_FORWARD

这个问题一般不会出现,默认都是打开的,我们用如下命令查看

# 查看是否启动IP_FORWARD
sysctl net.ipv4.ip_forward

image-20210129122932364
结果为1则表示启动,为0则未启动,用如下命令启动

echo 'net.ipv4.ip_forward = 1' >> /usr/lib/sysctl.d/50-default.conf

执行完成后,重启服务器或使用下面的命令从文件中加载配置:

sysctl -p /usr/lib/sysctl.d/50-default.conf

image-20210129123239065

### 解决宿主机 Telnet 连接不到 Docker 容器内服务端口问题 #### 验证容器内部服务运行状况 确认目标服务(如 Redis 或 MySQL)确实在容器中正常运行并监听指定端口。可以进入容器内部验证服务状态: ```bash docker exec -it 容器ID /bin/bash ps aux | grep 服务名称 ``` 如果服务未启动,则需排查日志文件找出原因。 #### 检查端口映射配置 确保 `docker run` 命令或 Docker Compose 文件中的 `-p` 参数正确设置了外部与内部端口之间的映射关系[^1]。例如,对于 Redis,默认情况下应为: ```bash -p 6379:6379 ``` 这表示将宿主机的 6379 端口转发至容器内的相同端口号。 #### 排除防火墙干扰 尽管部分案例显示即使关闭防火墙也能解决问题[^5],仍建议检查当前系统的防火墙设置是否允许所需流量通过。可临时禁用防火墙测试连通性;若恢复正常则考虑调整规则而非完全停用安全防护措施[^2]。 #### 测试网络连接稳定性 有时简单的重启操作即可恢复正常的通信链路[^3]。尝试以下命令组合来重置网络环境: ```bash systemctl restart network firewall-cmd --reload systemctl restart docker ``` 随后再次检验能否成功建立 TCP 连接。 #### 使用正确的 IP 地址访问 根据不同操作系统平台的特点选用恰当的目标地址进行连接请求。特别是在 Windows 上部署时要注意区分 Linux 虚拟机的实际 IP 和 localhost 的差异[^4]。通常推荐的做法是在本地开发环境中始终采用 `localhost` 访问方式,而在生产环境下依据实际情况决定具体使用的公网/私网 IP。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baret-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值