繁体   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