在docker中是用overlay做跨主机互联的时候。发现宿主机重启后会ping不通。
我的环境是
centos7
docker 18.06.3-ce
3.3.11
基于GPT
在使用 Docker Overlay 网络时,宿主机的重启可能会导致网络连接中断。这是因为 Docker Overlay 网络依赖于底层网络结构,当宿主机重启时,底层网络也会被重置,从而导致网络连接中断。
为了解决这个问题,可以尝试以下步骤:
确保 Docker 和内核版本是最新的,并安装相关的更新和修补程序。
在创建 Overlay 网络时,使用 --opt 参数设置 com.docker.network.driver.overlay.vxlanid_list 参数。这个参数指定了 VXLAN 网络标识符的范围,确保在宿主机重启后网络仍能正常工作。
如果你使用的是 Docker Swarm,可以考虑使用 Swarm 的自动重启功能。这个功能可以在节点故障时自动重启容器,并重新加入 Swarm 群集。
可以考虑使用第三方的容器编排工具,如 Kubernetes,它提供了更高级的容器编排功能,可以自动处理容器的重启和容器之间的网络连接问题。
总之,在使用 Docker Overlay 网络时,需要注意网络连接的可靠性和容错性,以确保在宿主机重启或其他故障情况下,网络连接仍能正常工作。
参考GPT和自己的思路:这个问题可能是由于 docker overlay网络驱动器未能正确配置所引起的。它有可能与您的宿主机的网络设置有关,因此让我们尝试一些步骤来解决这个问题。
使用docker network ls 命令查看您使用的是哪个网络,它应该是 "overlay" 网络,如下所示:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
5a543333bcdc bridge bridge local
dfdd43c222e2 docker_gwbridge bridge local
8c0270e07fcc host host local
d8728a784f1b ingress overlay swarm
a5090f64387e none null local
使用docker network inspect overlay命令查看overlay网络的具体设置,如果它是未配置的,请重新配置它,如下所示:
$ docker network inspect overlay
[
{
"Name": "overlay",
"Id": "5jbthddakj8ar91bgmtj2ascy",
"Created": "2018-11-28T16:14:13.222746692+08:00",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": null,
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4096"
},
"Labels": {}
}
]
确保您的宿主机的网络设置正确,包括网络适配器的 IP 地址、网关和 DNS 服务器地址。这些设置可能会因主机重启而重置,所以尽可能使用静态分配。
确保您的 Docker 版本是最新的,并且 overlay 网络驱动程序也是最新的。如果不是,请更新您的 Docker 版本,使用docker network prune 和 docker network create重新创建overlay网络。
如上述方法不起作用,您可以尝试在节点上重新启动docker服务,重新配置overlay网络,并通过 docker network create 命令创建新的overlay网络。
希望这些信息有助于解决您的问题!
该回答引用于gpt与OKX安生共同编写:
在使用 Docker overlay 网络模式时,跨主机互联需要满足以下条件:
如果您已经满足了上述条件,还无法在宿主机重启后成功 ping 到其他节点,则可能需要检查以下内容:
针对您的情况,建议您首先检查节点之间的网络连接是否正常,并且确保在宿主机重启后可以正确恢复。如果问题仍然存在,建议您尝试升级 Docker 版本或者重建整个 overlay 网络。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
当在docker中使用overlay网络时,network的driver会在每个节点上创建一个vxlan接口。而为了确保跨主机之间的通讯,需要使用一个可靠的路由器来确保跨节点的通讯。
具体解决方法如下:
检查宿主机上的EBtables是否开启,否则可以通过下面的命令开启。
sudo systemctl enable ebtables
sudo systemctl start ebtables
每次宿主机重启之后,docker需要重新启动。这是为了确保所有的网络接口都被正确创建。
sudo systemctl start docker
使用docker network命令查看overlay network的driver状态。
docker network ls
使用docker network命令配置overlay network的driver。
$ docker network create --driver=overlay --subnet=192.168.0.0/16 \
--opt encrypted \
--opt com.docker.network.driver.overlay.vxlanid_list=4097 \
--opt com.docker.network.driver.overlay.vxlan_mode=proxy \
--opt com.docker.network.driver.overlay.neighbor_ip=192.168.0.3 \
--opt com.docker.network.driver.overlay.ipsec=true \
mynetwork
其中,--opt com.docker.network.driver.overlay.neighbor_ip
是一个必填项,并且应该指向你在创建overlay网络时在其他主机上指定的IP地址。
再次使用docker network命令检查overlay network的driver状态。如果此时状态OK,那么overlay网络就可以正常运行。
在多个主机上创建容器,连接到overlay网络,测试网络是否正常运行。可以使用ping命令测试。
docker run --net=mynetwork --name=container-name -d my-image
docker exec -it container-name ping container-ip
希望以上内容对您有所帮助。
如果我的回答解决了您的问题,请采纳!