如何在两个网络中使用一个容器,如何找到每个网络中具有相同名称的容器

时间:2019-11-17 09:43:06

标签: docker docker-compose docker-networking

通过“每个网络的容器具有相同的名称”,我的意思是这样的情况:

有两个网络,分别称为一和二。一个包含一个称为服务器的容器,另一个包含一个称为服务器的容器。现在,如果另一个容器同时连接一个网络和两个网络,那么如何区分两个服务器容器?

这可以通过两个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

当前,只有网络1中的服务器回显abc,这意味着网络2中的服务器被遮盖。

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

我知道网络别名功能,可以在其中为每个服务器在其自己的网络中附加一个名称,因此,如果使它们唯一,则可以要求客户端访问两者。但实际上,我无权更改server.yml。

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

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式连接到其他服务:

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

例如

  • 您的服务称为“服务器”
  • 您的项目被称为“一个”
  • 您在项目“一个”中的网络称为“默认”(如果未指定,则使用默认)

    ping server.one_default

相关问题