目录
- 一、未打开安全组策略
- 二、防火墙开放端口未设置
- 三、没有启用IP_FORWARD
环境:阿里云CentOS7 服务器
问题:当启动一个容器向外部暴露端口时,服务器公网IP:端口号
无法访问
docker run -d --name nginx01 -p 90:80 nginx
一、未打开安全组策略
暴露给外部的端口需要打开对应的安全组设置,比如这里nginx对外暴露90
端口,就需要添加如下的安全组配置
二、防火墙开放端口未设置
首先查看防火墙是否开启,结果为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
查看防火墙的详细信息
我这里的问题就是防火墙未开放90
端口,所以要开放防火墙的对外暴露的端口
# 开放90端口(--premanent表示永久添加)
firewall-cmd --permanent --add-port=90/tcp# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
添加完成后再次查看就可以看到90
端口被开放
三、没有启用IP_FORWARD
这个问题一般不会出现,默认都是打开的,我们用如下命令查看
# 查看是否启动IP_FORWARD
sysctl net.ipv4.ip_forward
结果为1
则表示启动,为0
则未启动,用如下命令启动
echo 'net.ipv4.ip_forward = 1' >> /usr/lib/sysctl.d/50-default.conf
执行完成后,重启服务器或使用下面的命令从文件中加载配置:
sysctl -p /usr/lib/sysctl.d/50-default.conf