我的宿主机有多个网卡,多个公网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,请问我这是哪错了吗
花了两天时间,解决了这个问题,特此分享给大家吧
第一条,创建docker bridge没问题
第二条,运行容器,设置网卡,设置内网ip没问题
第三条,内网ip应该写容器设置的ip,而不是自定义bridge 的ip,而且还少了配置参数 -p all
正确的写法应该是
运行完这个之后,在容器内运行 curl -s https://ipinfo.io/ip 得到的结果就是18.18.18.18了