如何从连接到外部网络的另一个组合访问容器?

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/docker-cloud/apps/service-links/#using-service-and-container-names-as-hostnames

https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/

注意:即使是服务链接也无济于事,因为在 运行 第二个文件时,compose 会创建不同的网络。