docker bridge和iptables配置?

我的宿主机有多个网卡,多个公网ip,每个网卡对应一个公网ip
我现在想实现,从容器访问其他服务器的时候,走指定的网卡
我找到的结果是设置docker bridge,然后创建容器的时候,指定bridge,然后设置设置iptables 

docker network create  --subnet=172.20.0.0/16 my_bridge172_20
docker run -it --name v5 --network my_bridge172_20  --ip 172.20.0.100 centos:centos7.9.2009 /bin/bash
iptables -t nat -A POSTROUTING -s 172.20.0.0/16 -j SNAT --to 18.18.18.18
// 将内网 172.20.0.0/16 转换为公网18.18.18.18地址;SNAT,用于访问互联网

这些都设置好之后,我发现容器访问其他服务器的时候用的还是宿主机的主ip,请问我这是哪错了吗

阅读 2.3k
1 个回答

花了两天时间,解决了这个问题,特此分享给大家吧
第一条,创建docker bridge没问题
第二条,运行容器,设置网卡,设置内网ip没问题
第三条,内网ip应该写容器设置的ip,而不是自定义bridge 的ip,而且还少了配置参数 -p all
正确的写法应该是

iptables -t nat -A POSTROUTING -p all -s 172.20.0.100/16 -j SNAT --to-source 18.18.18.18
// 将内网 172.20.0.100/16 转换为公网18.18.18.18地址;SNAT,用于访问互联网

运行完这个之后,在容器内运行 curl -s https://ipinfo.io/ip 得到的结果就是18.18.18.18了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题