0

I'm running a NodeJS app and its related services (Redis, Postgres) through docker-compose. My NodeJS app can reach Redis just fine using its name & port from my docker-compose file, but for some reason I can't seem to reach Postgres:

  Error: getaddrinfo EAI_AGAIN postgres
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26)

My docker-compose file:

services:
    api:
        build:
            context: ./
            dockerfile: Dockerfile
        ports:
            - "3001:3001"
        depends_on:
            - postgres
            - redis

    postgres:
        image: postgres:11.1
        ports:
            - "5432:5432"
        expose:
            - "5432"
        hostname: postgres
        environment:
            POSTGRES_USER: root
            POSTGRES_PASSWORD: root
            POSTGRES_DB: test
        restart: on-failure
        networks:
            - integration-tests
    redis:
        image: 'docker.io/bitnami/redis:6.0-debian-10'
        environment:
            # ALLOW_EMPTY_PASSWORD is recommended only for development.
            - ALLOW_EMPTY_PASSWORD=yes
            - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
        ports:
            - '6379:6379'
        hostname: redis
        volumes:
            - 'redis_data:/bitnami/redis/data'

I've tried both normal lts and lts-alpine base images for my NodeJS app. I'm using knex, which delegates connecting to the pg library... Anybody have any idea why it won't even connect? I've tried both running directly through docker-compose and through tilt.

1
  • 1
    Remove networks section from postgres service and restart the services. It should work. Commented May 25, 2020 at 11:03

1 Answer 1

2

By adding :

        networks:
            - integration-tests

Only for postgres, you create a separate network only for postgres. By default, docker-compose create a network for all your container inside the same file with the name: <project-name>_default. It's why, when using docker-compose all the containers in the same file could communicate using their name.

By specifying a network for postgres, you "ask" to docker-compose to not use the default network for it.

You have 2 solutions: - Remove the instruction to failback to the default network - Add the networks instruction to all other containers in your project / or only those who need it

Note: By default, docker-compose will prefixe all your object (container, networks, volume) with the project name. The default project name is the name of the current directory.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.