Bootstrap

docker容器内无法访问外网问题

1、之前制作了docker的镜像,并成功启动了

docker run -p 8080:8030 -tid --name tomcat --privileged=true lalala /usr/sbin/init

2、通过外网访问IP:8080访问成功,其中IP为宿主机外网IP地址

curl http://xxx.xxx.xxx.xxx:8080

3、访问web服务,可以正常使用,结果发现web服务中需要调用外网地址内容无法访问

4、进入容器查看,竟然无法访问外网,curl: (6) Could not resolve host: www.baidu.com;

docker exec -it tomcat /bin/bash

curl www.baidu.com

5、宿主机访问外网和容器网络都正常

6、怀疑是宿主机防火墙转发问题,退出容器,查看宿主机防火墙NAT转发情况

exit
firewall-cmd --query-masquerade
结果是 no

7、sysctl -p 查看配置,发现没有配置转发,加入后再次查看,发现加入成功了

sysctl -p

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

8、开启转发

firewall-cmd --add-masquerade --permanent

9、重新加载运行的配置

firewall-cmd --reload

10、查看转发情况,结果是yes了

firewall-cmd --query-masquerade

11、重启docker和容器

systemctl restart docker
docker start tomcat
docker exec -it tomcat /bin/bash

12、进入容器查看情况,访问外网成功了~

docker exec -it tomcat /bin/bash

curl www.baidu.com

13、访问web服务,都正常了~

;