无法将主机名转换为“db”到地址:未知主机

时间:2021-01-09 02:04:25

标签: django postgresql docker

我正在尝试遵循以下提供的指南:https://docs.docker.com/compose/django/ 每当我尝试进行迁移时,它都会给我标题中给出的未知主机错误。我正在尝试将 PostgreSQL 与 Django 和 Wagtail 一起用作其 CMS

我的 docker-compose.yml 看起来像:

version: "3.9"
   
services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

我在 settings.py 文件中的设置如下所示:

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您的代码可以在两种不同的环境中运行,对连接信息进行硬编码可能不正确。

您在评论中提到您正在运行以下内容:

docker-compose up -d db
python manage.py makemigrations

在此环境中,python 在 Docker 之外运行。如果您将 ports: [5432:5432] 添加到 docker-compose.yml 文件中的数据库配置中,则可以通过(可能)localhost 访问该数据库。另一方面,当您运行 docker-compose up 时,应用程序在 Docker 内部运行,并且可以在 db 处访问数据库。

您可以使用环境变量来配置它。我发现为这些变量提供对开发人员有用的默认值,并在我的部署设置(docker-compose.yml)中将它们设置为不同的值很有用。

DATABASES = {
    'default': {
        ...
        'HOST': os.getenv('DB_HOST', 'localhost'),
        ...
    }
}
version: "3.9"
services:
  db:
    ports:
      - '5432:5432' # makes this accessible from your development environment
    ...
  web:
    environment:
      - DB_HOST=db
    ...
相关问题