【问题标题】:could not translate host name to "db" to address: Unknown host无法将主机名转换为“db”到地址:未知主机
【发布时间】:2021-01-09 02:04:25
【问题描述】:

我正在尝试遵循以下提供的指南: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,
    }
}

我错过了什么吗?

【问题讨论】:

  • 你是如何运行 makemigrations 命令的?
  • python manage.py makemigrations
  • 您应该从 Web 容器运行管理命令。试试docker-compose run --rm web python manage.py makemigrations
  • 谢谢!这并没有给我一个错误。但是,现在我的 wagtailcore.site 不存在?我应该对此提出一个新问题吗?
  • 乐于助人。听起来像一个单独的问题,一个新的问题可能是合适的

标签: django postgresql docker


【解决方案1】:

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

你在评论中提到你正在运行类似的东西:

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
    ...

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 2020-10-03
    • 1970-01-01
    • 2021-10-16
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多