I have two separate docker containers, each running an api (auth_api and user_api).
I am trying to make a get request from the user_api
service to the auth_api
service but it fails with this error: curl: (6) Could not resolve host: auth_api
These are my docker-compose files:
/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
The shopnet
network is created because it shows up in the list: docker network ls
I am executing the GET request with curl directly from the user_api
container:
curl http://auth_api:8000/auth
CodePudding user response:
Docker doesn't use _
in the hostname anymore.
Unless you didn't update for ages, replace _
by -
.
https://github.com/docker/compose/issues/229
CodePudding user response:
Seems like adding
networks:
- default
- shopnet
to the user_api service fixes the problem
CodePudding user response:
The user_api
service doesn't have a networks:
block, so it connects to the default
network that Compose automatically provides. You declare a separate shopnet
network, but don't attach your network to it. (Your answer addresses this by explicitly naming the other network.)
You can configure the default
network to make the "user" default
network be the same as the "auth" default
network:
# 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
You also may be able to put both services in the same docker-compose.yml
file, depending on your specific setup, and then you wouldn't need any manual networks:
setup at all.