Home > OS >  Docker compose request between containers could not resolve host
Docker compose request between containers could not resolve host

Time:03-22

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.

  • Related