django - 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上阅读了很多关于它的信息。更改了代码。但在这种情况下没有任何帮助。
解决方案
您必须在以下位置指定主机名:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432
}
}
否则它将尝试连接到名称为 db 的主机。
推荐阅读
- symfony - 使用 api-platform 时,注释上的未知属性不断出现错误
- php - Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException - Laravel 5.7
- python - 使用其他数据框中的变量将函数应用于 pd 数据框中的所有列
- ansible - Ansible 和 JMESPath,在 json_query 中转义正斜杠
- javascript - 如何从javascript中的列表中获取音频元素的src
- javascript - 例外:无法读取 polyfill js 中未定义的属性“原型”
- python - 在 Python 中创建随机字符串
- assembly - Proteus 8 - 破模拟
- java - 更新到 64 位版本 google play
- c# - 如何修复此 for 循环以比较两个 char 数组?