简体   繁体   中英

django container can't access postgres container

I am trying to have my database and my django rest api connect using docker-compose. However, my django container is giving me this error:

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: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

Postgres starts up normally, and I am able to access it locally using the terminal. I'm just not sure why my django container can't connect.

$ psql -h 0.0.0.0 -p 5432 -U bli1 -d redribbon
Password for user bli1:
psql (12.1)
Type "help" for help.

Within my settings.py for django this is my database values

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "redribbon",
        "USER": "bli1",
        "PASSWORD": "password",
        "HOST": "0.0.0.0",
        "PORT": "5432",
    }
}

docker-compose.yml

version: "3"
services:
  postgres:
    image: postgres:latest
    restart: always
    ports:
      - "5432:5432"
    volumes:
      - ./pgdata:/var/lib/postgresql/data/
    environment:
      POSTGRES_DB: redribbon
      POSTGRES_USER: bli1
      POSTGRES_PASSWORD: password
  api:
    build:
      dockerfile: Dockerfile.dev
      context: ./redribbon-api
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./redribbon-api/api:/usr/src/api
    depends_on:
      - postgres
    ports:
      - "8000:8000"

updates:

Within the django container, I am able to ping postgres and got this as a response

# ping postgres
PING postgres (172.19.0.2) 56(84) bytes of data.
64 bytes from redribbon_postgres_1.redribbon_default (172.19.0.2): icmp_seq=1 ttl=64 time=0.175 ms
64 bytes from redribbon_postgres_1.redribbon_default (172.19.0.2): icmp_seq=2 ttl=64 time=0.096 ms
64 bytes from redribbon_postgres_1.redribbon_default (172.19.0.2): icmp_seq=3 ttl=64 time=0.097 ms

I even tried changing "HOST": "0.0.0.0", to "HOST": "postgres", in my settings.py but I am getting the same error as above

local.yml

version: '3'

volumes:
  local_postgres_data: {}
  local_postgres_data_backups: {}

services:
  django:
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: apkomat_local_django
    container_name: django
    depends_on:
      - postgres
    volumes:
      - .:/app:z
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - "8000:8000"
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: apkomat_production_postgres
    container_name: postgres
    volumes:
      - local_postgres_data:/var/lib/postgresql/data:Z
      - local_postgres_data_backups:/backups:z
    env_file:
      - ./.envs/.local/.postgres

This is my local docker-compose configuration.

 depends_on:
      - postgres

This setting assures your django service won't start before postgres is ready to accept connections. To get your application running with these configuration use

docker-compose -f local.yml up 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM