如何从连接到外部网络的另一个组合访问容器?
How to access container from another compose that connected to external network?
这是我希望从外部容器连接到的容器配置的合成文件(在另一个合成文件中定义):
version: '3.5'
services:
service-to-connect-to:
build: .
networks:
- my-external-network
networks:
my-external-network:
external: true
和另一个包含我希望从中连接到的容器配置的撰写文件 service-to-connect-to
:
version: "3.5"
services:
service-to-connect-from:
build: .
我试图通过这个域连接到 service-to-connect-to
:
service-to-connect-to
service-to-connect-to.my-external-network
my_external_network.service-to-connect-to
但没有任何效果。
我哪里错了?
谢谢
首先,您必须将这两个服务添加到同一个网络才能连接它们。所以,后面的 compose 文件应该是这样的
version: "3.5"
services:
service-to-connect-from:
build .
networks:
- my-external-network
networks:
my-external-network:
external: true
现在这两个服务都在同一个网络上,它们可以使用容器的名称找到彼此。默认情况下,容器名称与服务名称相同,但 docker compose 还会在其前面加上 project name 前缀,默认情况下这是 compose 文件所在的目录名称。如果您首先通过 docker-compose up -d
启动服务,然后查看容器如何通过 运行 docker ps
命名,您可以看到这一点。容器名称可以是例如 project1_service-to-connect-to
。使用此名称,您可以从其他服务连接。
如果愿意,您还可以使用 container_name
服务选项明确设置容器的名称。使用时,compose 不再为容器名称添加前缀。
这对于 compose 是不可能的,因为第二个 docker-compose 文件将使用当前目录名称创建一个不同的网络,然后您的两个服务将位于两个不同的 docker 网络中并且将无法互相交谈。
所以你可以做两件事:
1. 要么对两种服务使用相同的网络(那么最好有一个组合的组合文件)。
2. 使用 docker swarm stacks,您可以在其中使用 <service_name>.<stack_name>
连接到其他服务
https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/
注意:即使是服务链接也无济于事,因为在 运行 第二个文件时,compose 会创建不同的网络。
这是我希望从外部容器连接到的容器配置的合成文件(在另一个合成文件中定义):
version: '3.5'
services:
service-to-connect-to:
build: .
networks:
- my-external-network
networks:
my-external-network:
external: true
和另一个包含我希望从中连接到的容器配置的撰写文件 service-to-connect-to
:
version: "3.5"
services:
service-to-connect-from:
build: .
我试图通过这个域连接到 service-to-connect-to
:
service-to-connect-to
service-to-connect-to.my-external-network
my_external_network.service-to-connect-to
但没有任何效果。
我哪里错了?
谢谢
首先,您必须将这两个服务添加到同一个网络才能连接它们。所以,后面的 compose 文件应该是这样的
version: "3.5"
services:
service-to-connect-from:
build .
networks:
- my-external-network
networks:
my-external-network:
external: true
现在这两个服务都在同一个网络上,它们可以使用容器的名称找到彼此。默认情况下,容器名称与服务名称相同,但 docker compose 还会在其前面加上 project name 前缀,默认情况下这是 compose 文件所在的目录名称。如果您首先通过 docker-compose up -d
启动服务,然后查看容器如何通过 运行 docker ps
命名,您可以看到这一点。容器名称可以是例如 project1_service-to-connect-to
。使用此名称,您可以从其他服务连接。
如果愿意,您还可以使用 container_name
服务选项明确设置容器的名称。使用时,compose 不再为容器名称添加前缀。
这对于 compose 是不可能的,因为第二个 docker-compose 文件将使用当前目录名称创建一个不同的网络,然后您的两个服务将位于两个不同的 docker 网络中并且将无法互相交谈。
所以你可以做两件事:
1. 要么对两种服务使用相同的网络(那么最好有一个组合的组合文件)。
2. 使用 docker swarm stacks,您可以在其中使用 <service_name>.<stack_name>
https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/
注意:即使是服务链接也无济于事,因为在 运行 第二个文件时,compose 会创建不同的网络。