Could not translate host name "db" to address using Postgres, Docker Compose and Psycopg2 Could not translate host name "db" to address using Postgres, Docker Compose and Psycopg2 python python

Could not translate host name "db" to address using Postgres, Docker Compose and Psycopg2


The problem is you should not be running python base.py as part of the RUN directive.

The RUN directive is executed only when you are building the image. The postgres container is not running at this point, nor has the network been created. Instead you want to use the CMD directive.

Change the Dockerfile to this:

FROM ubuntu:16.04RUN apt-get updateRUN apt-get -y install python-pipRUN apt-get updateRUN pip install --upgrade pipRUN pip install psycopg2-binaryCOPY base.py base.pyCMD ["python", "base.py"]

The above should result in the hostname db to be resolved. However if your python code doesn't have any reconnection logic for connecting to the database the container will likely still error out. This because the postgres container will be running but the database won't be ready to accept connections.

This can be temporarily fixed by adding restart: always to your docker-compose.yml.

version: '3'services:  db:    image: 'postgres:latest'    expose:      - "5432"    environment:      POSTGRES_PASSWORD: pw1234      POSTGRES_DB: base123  aprrka:    restart: always    build: .        depends_on:      - db

Hopefully this will get you up and running.


Add database and web service on same network in docker compose file. Also link db service and start web service after starting db service.

After properly adding network, link and depends_on configuration in docker compose file issue will be fixed.

Configuration example:

  services:      db:          container_name: db          networks:              - djangonetwork      web:          depends_on:             - db          links:             - db:db          networks:             - djangonetwork  networks:      djangonetwork:          driver: bridge

In my docker compose file, I have used network name as 'djangonetwork', you can use any other name.

the above configuration helped me to resolve the issue 'Could not translate host name db'.


If you're using docker-compose first add this line to your .yml:

environment:  - "POSTGRES_HOST_AUTH_METHOD=trust"

After that you start only you db docker:

docker-compose up db

It should start normally with a message like:

Recreating db... doneAttaching to dbdb_1           | ********************************************************************************db_1           | WARNING: POSTGRES_HOST_AUTH_METHOD has been set to "trust". This will allowdb_1           |          anyone with access to the Postgres port to access your database withoutdb_1           |          a password, even if POSTGRES_PASSWORD is set. See PostgreSQLdb_1           |          documentation about "trust":db_1           |          https://www.postgresql.org/docs/current/auth-trust.htmldb_1           |          In Docker's default configuration, this is effectively any otherdb_1           |          container on the same system.db_1           | db_1           |          It is not recommended to use POSTGRES_HOST_AUTH_METHOD=trust. Replacedb_1           |          it with "-e POSTGRES_PASSWORD=password" instead to set a password indb_1           |          "docker run".db_1           | ********************************************************************************