我目前正在使用 docker compose 部署一个 mpi 集群。这是我的
docker-compose.yml
:
version: "2"
services:
mpi_head:
build: .
image: ${TAG}
ports:
- "${HEAD_SSH_PORT}:22"
links:
- mpi_node
networks:
- net
volumes:
- ./tasks:/home/${USER}/tasks
mpi_node:
build: .
image: ${TAG}
networks:
- net
volumes:
- ./tasks:/home/${USER}/tasks
deploy:
replicas: ${NNODES}
networks:
net:
driver: bridge
注意
mpi_node
是要复制的。接下来,我将使用NNODES=6
来说明问题。
在完全命名为docker compose up -d
的存储库中使用cluster
部署集群后,我可以像这样从头容器中ping一个节点容器:
ping cluster-mpi_node-3.cluster_net
PING cluster-mpi_node-3.cluster_net (172.28.0.3) 56(84) bytes of data.
64 bytes from cluster-mpi_node-3.cluster_net (172.28.0.3): icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from cluster-mpi_node-3.cluster_net (172.28.0.3): icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from cluster-mpi_node-3.cluster_net (172.28.0.3): icmp_seq=3 ttl=64 time=0.073 ms
...
此操作适用于节点 2、3、4、5、6。但是,当我 ping 第一个节点时,结果是:
ping cluster-mpi_node-1.cluster_net
PING cluster-mpi_node-1.cluster_net (172.28.0.2) 56(84) bytes of data.
64 bytes from cluster-mpi_node-6.cluster_net (172.28.0.2): icmp_seq=1 ttl=64 time=0.096 ms
64 bytes from cluster-mpi_node-6.cluster_net (172.28.0.2): icmp_seq=2 ttl=64 time=0.063 ms
64 bytes from cluster-mpi_node-6.cluster_net (172.28.0.2): icmp_seq=3 ttl=64 time=0.059 ms
...
它导致的结果与我在 ping 节点 6 时的结果完全相同:
ping cluster-mpi_node-6.cluster_net
PING cluster-mpi_node-6.cluster_net (172.28.0.2) 56(84) bytes of data.
64 bytes from cluster-mpi_node-6.cluster_net (172.28.0.2): icmp_seq=1 ttl=64 time=0.051 ms
64 bytes from cluster-mpi_node-6.cluster_net (172.28.0.2): icmp_seq=2 ttl=64 time=0.069 ms
...
貌似在docker compose networking中出现了name resolution error,但是我不知道它是怎么发生的,也不知道如何修复。有什么想法吗?
我尝试了什么:使用副本和 ping 部署集群。
我期望发生的事情:docker 子网络中的正确名称解析。
实际结果是:两个不同的名称解析为同一个容器。