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 不再在主机名中使用 _
。
除非你很久没有更新了,否则请将 _
替换为 -
。
似乎要添加
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:
设置。
我有两个单独的 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 不再在主机名中使用 _
。
除非你很久没有更新了,否则请将 _
替换为 -
。
似乎要添加
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:
设置。