我正在使用本手册https://docs.docker.com/compose/django/
学习如何使用Compose + Django。这是我的配置文件
docker-compose.yml
version: '3'
services:
db:
image: postgres
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
setting.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
当我使用docker-compose up
运行时,一切都很好。
但是当我使用python manage.py runserver
运行时,出现此错误
psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known
猜猜,我的配置错误
答案 0 :(得分:1)
您忘记在hostname
服务中设置db
。
version: '3'
services:
db:
image: postgres
hostname: db
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
提示:部署生产服务器时不要使用runserver
。选中this doc
解决方案在评论中描述
编辑)
单独的设置示例。在设置文件夹中将原始settings.py
更改为base.py
。
<your_app>/settings/local.py
from .base import *
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'localhost',
'PORT': 5432,
}
}
<your_app>/settings/deploy.py
from .base import *
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
因此,最后,您的settings文件夹包含三个python文件。 base.py
,local.py
,deploy.py
使用本地设置运行服务器时,python manage.py runserver --settings <your_app>.settings.local
。
答案 1 :(得分:0)
我猜您正在尝试在主机上运行manage.py runserver。错误意味着,您无法从中访问主机“ db”(尝试在控制台中ping db)。造成这种情况的原因有很多:
docker-compose up -d db
ping 127.0.0.11
(这是docker的DNS服务器)P.S。您是否真的希望本地Django在容器中使用Postgres?
答案 2 :(得分:-1)
这是docker / django设置中的常见问题,postgres容器已初始化,但引擎尚未就绪。 在运行Web容器之前,您必须等待PostgreSQL服务器启动。
您可以通过多种方式进行操作,请看dockerize
dockerize -timeout=20s -wait ${POSTGRES_PORT}