在设置.py中数据库配置错误

2024-06-16 14:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习如何使用本手册使用Compose+Django https://docs.docker.com/compose/django/

这是我的配置文件

码头工人-合成.yml

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

在设置.py在

^{pr2}$

当我使用docker-compose up运行时,一切正常。在

但是当我使用python manage.py runserver运行时,我遇到了这个错误 psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known

我猜错了


Tags: djangocomposedockerpyhttpscomdocsdb
3条回答

您忘记在db服务中设置hostname。在

version: '3'

services:
  db:
    image: postgres
    hostname: db
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

提示:部署生产服务器时不要使用runserver。检查this doc

在评论中描述了解决方案

编辑)

单独设置示例。将您的原始settings.py设置为base.py文件夹中。在

<your_app>/settings/local.py

^{pr2}$

<your_app>/settings/deploy.py

from .base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

最后,您的settings文件夹包含三个python文件。base.pylocal.pydeploy.py

当您使用本地设置运行服务器时,python manage.py runserver settings <your_app>.settings.local。在

这是docker/django安装中常见的问题,postgres容器已初始化,但引擎尚未就绪。 运行web容器之前,必须等待postgresql server启动。在

你可以用几种方法来做,看看dockerize

dockerize -timeout=20s -wait ${POSTGRES_PORT}

我猜你想逃跑管理.py在主机上运行服务器。错误意味着,您不能从它访问主机'db'(请尝试在控制台中ping db)。这有几个原因:

  1. 你的docker容器数据库坏了。尝试运行docker-compose up -d db
  2. 您正在使用Windows作为主机系统。在Windows中,无法从主机访问容器,必须在本地安装postgres。在
  3. 你有网络问题。尝试ping 127.0.0.11(这是docker的DNS服务器)

另外,你真的希望本地Django在容器中使用Postgres吗?在

相关问题 更多 >