我有一个docker swarm节点,运行通过覆盖网络连接的一组docker服务。需要时,我通过terraform动态添加另一个docker节点。这将是一个单独的ec2实例设置,并作为工作节点连接到现有的群集网络。
我将在我的管理器中运行一个容器,正在运行的容器需要与管理器节点中的现有服务进行对话。例如:连接到postgres服务并运行少量查询。
docker -H <node ip> run --network <overlay network where services are running> <some image> <command>
在容器中运行的脚本失败,出现“名称或服务未知”错误。我尝试通过扑向容器中进行手动ping操作,并且在大约4或5秒钟后ping操作成功。我尝试了数百遍,总是遇到同样的问题。同样,节点何时加入群集也没关系。每次我运行上面的命令时,都会遇到相同的问题。
此外,我无法控制容器中运行的脚本,因此无法添加重试。
还有一件事。有时,可以立即获得某些服务。例如,Postgres将失败。但是,可以到达另一个公开其余端点的服务。但这并非总是如此。
我能够通过一系列测试服务重现此问题:
重现问题的步骤:
docker network create -d overlay --attachable platform
中创建覆盖网络for i in {1..25} do docker service create --network platform -p :80 --name "service-${i}"
dockerbogo/docker-nginx-hello-world done
中创建服务docker -H 10.128.0.3:2376 run --rm --network platform centos ping service-1
中运行Docker守护程序日志:https://pastebin.com/65Lihp8v
有帮助吗?