生活在两个网络中的容器如何找到每个网络的同名容器

How a container live in two networks can find each network's container with a same name

"each network's container with a same name",我指的是这样的场景:

有两个网络,称为一和二。一种是有一个叫server的容器,另一种是也有一个叫server的容器。现在,如果另一个容器同时加入一个和两个网络,它如何区分两个服务器容器?

这可以用两个 docker-compose.yml 文件来演示:

#server.yml

version: '3.7'
services:
  server:
    image: toolbelt/netcat
    entrypoint: nc -kl 1111

#client.yml

version: '3.7'
services:
  client:
    image: toolbelt/netcat
    networks:
      - one
      - two
    entrypoint:
      - sh
      - -c
      - echo abc | nc -q 1 server 1111

networks:
  one:
    external:
      name: one_default
  two:
    external:
      name: two_default

我们可以用

启动两个服务器
docker-compose -p one -f server.yml up
docker-compose -p two -f server.yml up

并要求客户端连接

docker-compose -p client -f client.yml up

并且目前只有网络一的服务器回显abc,这意味着网络二的服务器被隐藏了。

我想知道如何让客户端能够访问两个服务器?

我知道网络别名功能,我可以在每个服务器自己的网络中为每个服务器指定一个额外的名称,因此如果我使它们唯一,我可以要求客户端访问这两个名称。但在我的真实情况下,我无权更改 server.yml.

是否可以在客户端的 docker-compose.yml 文件中以某种方式为服务器提供别名,或者是否有其他一些方法可以区分这两个服务器?

您可以通过以下方式连接到不同的服务:

[container name].[project]_[network name]

例如

  • 您的服务名为 "server"
  • 您的项目名为 "one"
  • 您在项目 "one" 中的网络称为 "default"(如果指定了 none,则使用默认值)

    ping server.one_default