docker使用overlay跨主机互联问题

在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网络驱动器未能正确配置所引起的。它有可能与您的宿主机的网络设置有关,因此让我们尝试一些步骤来解决这个问题。

  1. 确保您使用的是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

  1. 确定overlay网络是否正常工作

使用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": {}
}
]

  1. 确定宿主机网络设置是否正确

确保您的宿主机的网络设置正确,包括网络适配器的 IP 地址、网关和 DNS 服务器地址。这些设置可能会因主机重启而重置,所以尽可能使用静态分配。

  1. 确定您的overlay网络驱动器是否更新

确保您的 Docker 版本是最新的,并且 overlay 网络驱动程序也是最新的。如果不是,请更新您的 Docker 版本,使用docker network prune 和 docker network create重新创建overlay网络。

如上述方法不起作用,您可以尝试在节点上重新启动docker服务,重新配置overlay网络,并通过 docker network create 命令创建新的overlay网络。

希望这些信息有助于解决您的问题!

该回答引用于gpt与OKX安生共同编写:
  • 该回答引用于gpt与OKX安生共同编写:

在使用 Docker overlay 网络模式时,跨主机互联需要满足以下条件:

  1. 使用的是 Docker swarm 集群模式;
  2. 在所有节点上启用 Docker overlay 网络,并确保它们使用相同的网络名称;
  3. 所有节点之间的防火墙都已正确配置,以便 Docker 运行所需的端口(如 4789/udp 和 7946/tcp)可以正常通信;
  4. 主机之间的 DNS 解析设置正确。

如果您已经满足了上述条件,还无法在宿主机重启后成功 ping 到其他节点,则可能需要检查以下内容:

  1. 检查各个节点是否已更新到最新版本的 Docker。有时候 Docker 的一些 bug 或问题会导致跨主机的网络连接出现问题;
  2. 检查各节点的物理网络连接是否正常。如果节点之间的网络连接不稳定或存在故障,那么容器之间的通信也可能受到影响;
  3. 检查各节点的 IP 地址和子网掩码是否正确。这些信息必须正确配置,以便 Docker 能够正确识别和路由网络流量;
  4. 检查防火墙设置是否正确。如果节点之间的防火墙设置不正确,那么 Docker 容器之间的通信也可能受到影响。

针对您的情况,建议您首先检查节点之间的网络连接是否正常,并且确保在宿主机重启后可以正确恢复。如果问题仍然存在,建议您尝试升级 Docker 版本或者重建整个 overlay 网络。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
当在docker中使用overlay网络时,network的driver会在每个节点上创建一个vxlan接口。而为了确保跨主机之间的通讯,需要使用一个可靠的路由器来确保跨节点的通讯。

具体解决方法如下:

  1. 检查是否开启了EBtables

检查宿主机上的EBtables是否开启,否则可以通过下面的命令开启。

sudo systemctl enable ebtables
sudo systemctl start ebtables
  1. 重启docker

每次宿主机重启之后,docker需要重新启动。这是为了确保所有的网络接口都被正确创建。

sudo systemctl start docker
  1. 检查overlayDriver状态

使用docker network命令查看overlay network的driver状态。

docker network ls
  1. 配置overlayDriver

使用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地址。

  1. 检查overlayDriver状态

再次使用docker network命令检查overlay network的driver状态。如果此时状态OK,那么overlay网络就可以正常运行。

  1. 测试overlay网络

在多个主机上创建容器,连接到overlay网络,测试网络是否正常运行。可以使用ping命令测试。

docker run --net=mynetwork --name=container-name -d my-image
docker exec -it container-name ping container-ip

希望以上内容对您有所帮助。
如果我的回答解决了您的问题,请采纳!