簡體   English   中英

無法與 Django 中的 Postgres 容器連接

[英]failed to connect with Postgres container in Django

django.db.utils.OperationalError:連接到“db”(172.18.0.2)的服務器,端口 5432 失敗:致命:數據庫系統正在啟動

我在連接到 Postgres 容器時遇到問題。 我嘗試了不同的方式,例如僅在 docker-compose 文件中設置密碼。 還是卡住了。

docker-compose.yml

version: '3'
services:
  db:
    image: postgres:alpine
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=user
      - POSTGRES_DB=userdb
    volumes:
      - django_db:/var/lib/postgresql/data
    container_name: db
  
  singup: 
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    container_name: singup
    depends_on:
      - db 
volumes:
  django_db:

數據庫設置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'userdb',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'db',
    }
}

這是一個時間問題,即使您有以下行

  singup: 
    depends_on:
      - db 

它只是在等待 db 容器啟動並運行,而不一定是 Postgres。

為避免這種情況,請使用 wait-for-it、dockerize、sh-compatible wait-for 或 RelayAndContainers 模板等工具。 這些是小型包裝腳本,您可以將它們包含在應用程序的映像中,以輪詢給定的主機和端口,直到它接受 TCP 連接。

例如,要使用 wait-for-it.sh 或 wait-for 來包裝服務的命令:

  singup: 
    depends_on:
      - db
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]

等待它的回購: https://github.com/vishnubob/wait-for-it

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM