为什么docker compose networking name resolution error while using replicas?

问题描述 投票:0回答:0

我目前正在使用 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 子网络中的正确名称解析。
实际结果是:两个不同的名称解析为同一个容器。

docker-compose docker-networking
© www.soinside.com 2019 - 2024. All rights reserved.