Max
Max

Reputation: 81

Connect to PostgreSQL Database in Docker Container from DBeaver

I can't get the connection between my PostgreSQL database from my Rails app which is running in a Docker container working.

The application just works fine, I just can't connect to the database.

docker-compose.yml:

services:
    app:
        build:
            context: .
            dockerfile: app.Dockerfile
        container_name: application_instance
        command: bash -c "bundle exec puma -C config/puma.rb"
        volumes:             
            - .:/app
            - node-modules:/app/node_modules
            - public:/app/public
        depends_on:
            - database
            - redis
        env_file:
            - .env
    database:
        image: postgres
        container_name: database_instance
        restart: always
        volumes:      
            - db_data:/var/lib/postgresql/data
        ports:
            - "5432:5432"
        env_file:
            - .env
        environment: 
            POSTGRES_USER: ${POSTGRES_USER}
            POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
            POSTGRES_DB: ${POSTGRES_PRODUCTION_DB}
    nginx:
        build:
            context: .
            dockerfile: nginx.Dockerfile
        depends_on:
            - app
        volumes:
            - public:/app/public
        ports:
            - "80:80"
    redis:
        image: redis
        container_name: redis_instance
        ports:
            - "6379:6379"
    sidekiq:
        container_name: sidekiq_instance
        build:
            context: .
            dockerfile: app.Dockerfile
        depends_on:
            - redis
            - database
        command: bundle exec sidekiq
        volumes:
            - .:/app
        env_file:
            - .env
volumes:
    db_data:
    node-modules:
    public:

If I try to connect via DBeaver I get the following message:

DBeaver error

Any idea what's going wrong here? The port should be exposed on my local machine. I also tried with the IP of the container, but then I get a timeout exception.

Upvotes: 3

Views: 4846

Answers (2)

velocity
velocity

Reputation: 2066

I removed the Database name in DBeaver connection configuration and it worked

enter image description here

Upvotes: 1

Raba_Ababa
Raba_Ababa

Reputation: 83

This is because you most likely have postgres running locally on your machine (port 5432) and also on a docker (port 5432). Dbeaver wants to connect to database on your local machine, than on docker.

Any solution I figure out is to temporary stop/turn of your local postgres service (on Windows: Task manager -> Services -> (postgres service) -> stop).

I was also struggling with issue.

Upvotes: 4

Related Questions