CentOS开启防火墙后,外网无法通过宿主机IP + 端口访问Docker容器的解决办法
问题表现
Docker容器开启的服务,CentOS内部可以访问,用curl http://127.0.0.1:8011 可以访问。
CentOS的IP,外网可以正常Ping通。
容器对外端口,外网无法Telnet通。
外网无法访问Docker容器网站。
原因
CentOS防火墙的原因,需要允许NAT转发。
解决办法
前提是CentOS虚拟机网络要用桥接模式,让虚拟机IP保持跟缩主机同一段IP。
设置防火墙允许NAT转发。
firewall-cmd --zone=public --add-masquerade --permanent
把docker0网卡添加到trusted域
firewall-cmd --permanent --zone=trusted --change-interface=docker0
防火墙开放容器端口,假如容器对外暴露的端口是8011,那么防火墙要开放这个端口
firewall-cmd --add-port=8011/tcp --permanent
然后重启防火墙、重启Docker,重启容器,就可以外网访问Docker网站了。
firewall-cmd --reload
systemctl restart docker
docker start 容器名