由于项目其他应用对操作系统及内核的限制使用centos7.2,当用docker、docker-compose部署时,容器启动后内外网络不通,导致容器与宿主机应用等互相访问不了。
然后想尽各种办法,重建docker0
#停止docker systemctl stop docker #docker0 ip link set dev docker0 down #删除docker0网桥 brctl delbr docker0 #新增一个docker0网桥 brctl addbr docker0 #增加网卡(这里ip也完全使用这个) ip addr add 172.16.10.0/24 dev docker0 #启用网卡 ip link set dev docker0 up #重启docker服务 systemctl restart docker
这样用docker创建的容器可以联通了。
但是docker-compose起的容器依然不能。
最后发现docker-compose启动时会自动创建默认网络,这个默认网络及网桥无法连通内外网环境,百度好多有防火墙开通规则、centos开通ip4_forward依然不行。
使用自定义网桥,网络无问题,但是服务器重启后docker启动不了,并且区块链容器合约网络一直有问题。
docker network create -d bridge -o "com.docker.network.bridge.default_bridge"=true -o "com.docker.network.bridge.enable_icc"=true -o "com.docker.network.bridge.enable_ip_masquerade"=true -o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" -o "com.docker.network.bridge.name"="docker0" -o "com.docker.network.driver.mtu"="1500" br10
又使用docker-compose使用network_mode:"brige"及links结合使用,虽然内外容器通了,kafka集群broker死活又连不通。
?
折腾够了也就知道什么问题了,centos7.2内核bridge.ko问题导致的docker网络环境问题。要不升级内核,要升级操作系统。当然我们升级后又要解决其他应用对内核版本的对应问题,这里不再赘述。
此文章描写,是为了防止大家在centos7.2 内核3.10.0-327.el7.x86_64 踩坑。
|