如何使用docker-compose协调三个容器,使应用程序使用容器名称相互通信?

如何使用docker-compose协调三个容器,使应用程序使用容器名称相互通信?

我有 3 个图像(todofront、todoback 和 todotests),我使用 docker-compose 通过创建容器来协调这些图像。

Docker-撰写:

version: '3'

services:
  todotests:
    image: todotests
    container_name: todotests
    environment: 
      - FRONT_HOST=todofront
    restart: always
    depends_on:
      - todoback
      - todofront

  todofront:
    image: todofrontend
    container_name: todofront
    ports:
      - 3000:3000
    environment:
      - REACT_APP_API_HOST=todoback
    restart: always
    depends_on:
      - todoback

  todoback:
    image: todobackend
    container_name: todoback
    restart: always
    ports:
      - 3001:3001

在 todofront 中,我使用环境变量 REACT_APP_API_HOST,其值为“todoback”。但是,这样前端和后端之间就没有通信。但是当我将“todoback”的值更改为“localhost”时,应用程序就可以正常工作。是不是无法使用容器名称,还是缺少了什么?

要启动容器我使用:docker-compose up -d

系统:Ubuntu 20.04.6 LTS

图片 1:

图片 1

图片2:

图片 2

图片 3:

图 3

在图 1 中,容器能够相互通信。在图 2 中,我可以使用“localhost”访问“todoback”容器,但不能使用容器名称“todoback”。

在 image3 上,我还可以使用其 IP 地址访问该容器。

答案1

这是意料之中的 - 容器名称无法从主机解析。但在同一个自定义网络中,您可以使用服务名称来解析和连接到不同的容器。

docker-compose创建一个自定义网络,并将Compose文件中定义的所有容器默认放到自定义网络上。

因此,您可以在容器内引用todoback/ ,但不能从主机引用。todofront

相关内容