Docker 容器之间的组合请求无法解析主机

Docker compose request between containers could not resolve host

我有两个单独的 docker 容器,每个 运行 一个 api(auth_api 和 user_api)。
我正在尝试从 user_api 服务向 auth_api 服务发出获取请求,但失败并出现以下错误:curl: (6) Could not resolve host: auth_api

这些是我的 docker-compose 文件:
/auth

version: '3'
services:
  auth_api:
    build:
      context: .
    command: uvicorn main:app --host 0.0.0.0
    ports: 
      - "8000:8000"

networks:
  default:
    name: shopnet
    external: false

/user

version: '3'
services:
  user_api:
    build:
      context: .
    command: uvicorn main:app --host 0.0.0.0 --port 8001
    ports: 
      - "8001:8001"

networks:
  shopnet:
    external: true

shopnet 网络已创建,因为它显示在列表中:docker network ls

我正在直接从 user_api 容器中使用 curl 执行 GET 请求:
curl http://auth_api:8000/auth

Docker 不再在主机名中使用 _

除非你很久没有更新了,否则请将 _ 替换为 -

https://github.com/docker/compose/issues/229

似乎要添加

networks:
  - default
  - shopnet

user_api 服务修复了问题

user_api 服务没有 networks: 块,因此它连接到 Compose 自动提供的 default 网络。您声明一个单独的 shopnet 网络,但不要将您的网络附加到它。 ( 通过明确命名另一个网络来解决这个问题。)

您可以configure the default network使“user”default网络与“auth”default网络相同:

# user/docker-compose.yml
version: '3.8'
services:
  user_api:
    build: .
    ports: ['8081:8081']
    # networks: [default] # automatically provided by Compose

networks:
  default:
    name: shopnet
    external: true

您也可以将这两个服务放在同一个 docker-compose.yml 文件中,具体取决于您的特定设置,然后您根本不需要任何手动 networks: 设置。