-1

I don't know why I am not able to fetch data from my postgreSQL database. I always got the same error when I do :

docker logs web I got that :

django.db.utils.OperationalError: could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? could not connect to server: Address not available I tried a lot of things but without effects...

Here is my docker-compose :

version: '3.7'

services:
  web:
    container_name: web
    build:
      context: .
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/usr/src/web/
    ports:
      - 8000:8000
      - 3000:3000
      - 5432:5432
    stdin_open: true
    depends_on:
      - db

  db:
    container_name: db
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=mydb
      - POSTGRES_HOST=localhost
volumes:
  postgres_data:

And this is the dockerfile :

# pull official base image
FROM python:3.8.3-alpine

# set work directory
WORKDIR /usr/src/web

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev
RUN apk add zlib-dev jpeg-dev gcc musl-dev
# install nodejs
RUN apk add --update nodejs nodejs-npm

# copy project
ADD . .

# install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

in my settings.py I have this for the database :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydb',
        'USER': 'admin',
        'PASSWORD': 'pass',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

Could you help me please ?

I have absolutely no ideas how to solve that, I tried a lot of things but without any effects...

For instance, I tried to change in settings this parameter :

'HOST': 'localhost' to 'HOST':'db'

But I got that errors when I type that docker logs web :

django.db.utils.OperationalError: FATAL:  password authentication failed for user "admin"

Thank you very much

Ted
  • 1
  • 1

1 Answers1

0

have you tried to EXPOSE the port 5432 on the database container? something like

      db:
        container_name: db
        image: postgres:12.0-alpine
      volumes:
         - postgres_data:/var/lib/postgresql/data/
      environment:
         - POSTGRES_HOST_AUTH_METHOD=trust
         - POSTGRES_USER=admin
         - POSTGRES_PASSWORD=pass
         - POSTGRES_DB=mydb
         - POSTGRES_HOST=localhost
      expose:
         - "5432"

or inside the Dockerfile EXPOSE 5432/tcp

here is a link where you can check out the difference between ports: and expose: What is the difference between docker-compose ports vs expose

Mike
  • 21
  • 3