【发布时间】:2021-02-27 23:29:23
【问题描述】:
我有 2 个不同的组件/图像和以下 docker-compose 文件。
version: '3'
services:
my_service:
image: my_service:latest
restart: always
environment:
- DUMMY=dummy
ports:
- "8071:8071"
command: ""
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/bin ]"]
interval: 30s
timeout: 30s
retries: 3
container_name: my-service-container
networks:
- my_net
my_ui:
image: my_ui:latest
depends_on:
- my_service
restart: always
ports:
- "8080:8080"
command: ""
networks:
- my_net
networks:
my_net:
driver: bridge
“my_ui”组件是一个从“my_service”组件调用服务的ui(角度代码)。 当我使用“真实”主机名(所有部署都在那里的服务器)调用它时,它可以工作,即
例如
主机名(Linux):real.host.name
Docker 已在上述主机上安装并运行。我在上面的主机上运行了 docker-compose up,所以我的捐赠者已经启动并运行了。
从另一台机器或主机我通过邮递员调用以下命令,它可以工作。
(POST 请求,具有所需的原始正文等)。
http://real.host.name:8071/api/auth/login
上述调用有效。但是,我想对此类调用使用 docker 服务名称,以便顺利部署到多个主机/环境。
当我尝试以下方法时,它不起作用:
http://my_service:8071/api/auth/login
失败了
Failed to load resource: net::ERR_NAME_NOT_RESOLVED
当我转到“my_ui”时
docker exec -it rm <container name of my_ui> /bin/bash
$ ping my_service
以上工作正常,即 ping 很好。但是,当我发出 http 请求时,它无法识别“my_service”主机。
有人可以帮忙吗?
【问题讨论】:
-
实际应用程序在哪里运行?如果它类似于来自浏览器的
fetch或 XHR 调用,那是在 Docker 之外,它不能使用 Docker 内部的服务名称。在这种情况下,real.host.name和已发布的ports:是正确的方法。
标签: docker rest docker-compose