我有 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:
图片2:
图片 3:
在图 1 中,容器能够相互通信。在图 2 中,我可以使用“localhost”访问“todoback”容器,但不能使用容器名称“todoback”。
在 image3 上,我还可以使用其 IP 地址访问该容器。
答案1
这是意料之中的 - 容器名称无法从主机解析。但在同一个自定义网络中,您可以使用服务名称来解析和连接到不同的容器。
docker-compose创建一个自定义网络,并将Compose文件中定义的所有容器默认放到自定义网络上。
因此,您可以在容器内引用todoback
/ ,但不能从主机引用。todofront