7

这是我希望从外部容器连接到的带有容器配置的撰写文件(在另一个撰写文件中定义):

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

但他们都没有工作。

我哪里错了?

谢谢

4

2 回答 2

9

首先,您必须将这两种服务添加到同一网络才能连接它们。因此,后者的撰写文件应该类似于

version: "3.5"

services:
  service-to-connect-from:
    build .
    networks:
      - my-external-network

networks:
  my-external-network:
    external: true

现在这两个服务都在同一个网络上,它们可以使用容器的名称找到彼此。容器名称默认与服务名称相同,但 docker compose 也为其添加前缀项目名称,默认情况下是 compose 文件所在的目录名称。如果您首先启动服务docker-compose up -d,然后通过运行查看容器如何命名,您可以看到这一点docker ps。例如,容器名称可以是project1_service-to-connect-to。使用此名称,您可以从其他服务进行连接。

如果您愿意,您还可以使用container_name服务选项显式设置容器的名称。使用时,compose 不再为容器名称添加前缀。

于 2018-07-25T18:26:23.040 回答
-1

这对于 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 在运行第二个文件时会创建不同的网络。

于 2018-07-25T19:33:24.857 回答