我正在尝试遵循以下提供的指南: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,
}
}
我错过了什么吗?
答案 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
...