首页 > 解决方案 > Docker 和 POSTGRESQL

问题描述

我在 Django 上使用 Docker 创建新项目。当我编写连接到 Postgres 的设置时,它有一些错误 - (conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: could not translate host name "db" to address: nodename nor servname提供或未知)

那是我在项目中的代码:settings.py

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

码头工人-compose.yml

version: '3.7'
services:
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000
    depends_on:

      - db


  db:

      image: postgres:11
      environment:
        POSTGRES_DB: "db"
        POSTGRES_HOST_AUTH_METHOD: "trust"

和 Dockerfile:

# Pull base image
FROM python:3.7
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set work directory
WORKDIR /code
# Install dependencies

COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
# Copy project
COPY . /code/
RUN pip install psycopg2-binary

请帮助决定这个问题。我在stackoverflow上阅读了很多关于它的信息。更改了代码。但在这种情况下没有任何帮助。

标签: djangopostgresqldockerdjango-postgresql

解决方案


您必须在以下位置指定主机名:

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

否则它将尝试连接到名称为 db 的主机。


推荐阅读