Skip to main content

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

Required fields*

Docker connection issues on Compute Engine

I am currently working on a web-app which uses postgres and Node.js Express. I have dockerized this application and pushed it to the Artifact registry. I have pulled both the images to the VM.

My docker compose file looks like this:

services:
    postgres:
        image: postgres:latest
        container_name: postgres
        environment:
            POSTGRES_DB: web_app_db
            POSTGRES_USER: developer
            POSTGRES_PASSWORD: test1234
        ports:
            - "5432:5432"
        volumes:
            - postgres-data:/var/lib/postgresql/data
        network:
            - my-nw
    api:
        image: web-api 
        command: >
            sh -c '
                npm run upgrade-docker &&
                if [ "$SEED" = "true" ]; then
                    npm run seed-roles ./src/environments/.env.docker &&
                    npm run seed-stores ./src/environments/.env.docker &&
                    npm run seed-products ./src/environments/.env.docker
                fi &&
                npm run start ./src/environments/.env.docker
            '
        environment:
            - WORKDIR=$PWD
            - PORT=80
            - SEED=true
        volumes:
            - ./src:/app/src
            - ./dist:/app/dist
        depends_on:
            - postgres
        network:
            - my-nw
networks:
  my-nw:
    driver: bridge

volumes:
    postgres-data:

When I run docker compose up -d postgres, Postgres server starts and is up and running and it exposes port 5432. When I run docker compose up api, the web api starts but it is unable to connect to Postgres. After a while the connection times out with error:

api  | Error: connect ETIMEDOUT 172.22.0.2:5432
api  |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16) {
api  |   errno: -110,
api  |   code: 'ETIMEDOUT',
api  |   syscall: 'connect',
api  |   address: '172.22.0.2',
api  |   port: 5432
api  | }

Is something missing ?

I have tried changing the host names from postgres to 0.0.0.0 and localhost in the api container but nothing works. I have tried using the default network instead of my-nw but that doesn't work either. I can connect to postgres from the host machine using the command psql -U developer -h localhost -p 5432 Ironically this same docker compose file works just fine on my local machine but fails on the VM.

Answer*

Cancel