簡體   English   中英

使用 docker-compose 時 Django 找不到數據庫

[英]Django cannot find database when using docker-compose

文件

FROM python:3.8

ENV PYTHONUNBUFFERED 1
ENV WORKDIR /usr/src/app

WORKDIR ${WORKDIR}

RUN pip install --upgrade pip && pip install pipenv


COPY ./Pipfile* ${WORKDIR}/

RUN pipenv lock --requirements > requirements.txt

RUN pip install -r requirements.txt

ADD . ${WORKDIR}/

docker-compose.yml

version: '3'

services:
  database:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: development
      POSTGRES_USER: development
      POSTGRES_DB: dev_db
    ports:
      - 5432:5432
  backend:
    build: .
    command: python /usr/src/app/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/usr/src/app
    ports:
      - 8000:8000
    depends_on:
      - database

Django 數據庫配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'dev_db',
        'USER': 'development',
        'PASSWORD': 'development',
        'HOST': 'database',
        'PORT': 5432,
    }
}

但是,當我啟動 docker compose 時,它​​會給出以下消息:

> Is the server running on host "database" (172.29.0.2) and accepting
    TCP/IP connections on port 5432?

任何人都可以就我收到此錯誤的原因提供一些指導嗎? 據我所知,這兩個服務都在同一個網絡內

這可能是因為當 Django 實例准備好時,Postgres 仍在啟動。

一個常見的解決方案是使用像wait-for這樣的腳本來延遲命令的執行,直到服務在特定的主機/端口上進行回復。

查看有關控制多個容器的啟動順序的 Docker 文檔。

我認為您在 yml 文件中缺少主機名。 見下文

services:
  database:
    image: postgres:latest
    hostname: database
    environment:
      POSTGRES_PASSWORD: development
      POSTGRES_USER: development
      POSTGRES_DB: dev_db
    ports:
      - 5432:5432

暫無
暫無

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

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