【发布时间】:2020-09-20 16:34:37
【问题描述】:
所以,基本上我有这个docker-compose.yml 配置:
services:
postgres:
container_name: youtube_manager_postgres
restart: always
image: postgres:alpine
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=qwerty123
- POSTGRES_DB=ytmanager
volumes:
- postgres_data:/var/lib/postgresql/data/
ports:
- "5432:5432"
django:
container_name: youtube_manager_django
restart: always
build:
context: ../
dockerfile: deploy/django/Dockerfile
command: sh -c "poetry run python3 manage.py migrate &&
poetry run python3 manage.py collectstatic --no-input --clear &&
poetry run uwsgi --ini /etc/uwsgi.ini"
ports:
- "8000:8000"
volumes:
- staticfiles:/code/static
- mediafiles:/code/media
depends_on:
- postgres
我的 Django 的数据库首选项是:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'ytmanager',
'USER': 'admin',
'HOST': '0.0.0.0',
'PASSWORD': 'qwerty123',
'PORT': '5432',
}
}
我不想以两种方式使用它:
1. 在开发过程中运行docker-compose up -d postgres,然后运行python3 manage.py runserver(实际上是poetry run python3 manage.py runserver,但现在没关系)。
2. 部署期间运行docker-compose up。
目前,它适用于 1 选项,但是当我执行 docker-compose up 时出现错误:
youtube_manager_django | django.db.utils.OperationalError: could not connect to server: Connection refused
youtube_manager_django | Is the server running on host "0.0.0.0" and accepting
youtube_manager_django | TCP/IP connections on port 5432?
如果我以这种方式更改 Django 数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'ytmanager',
'USER': 'admin',
'HOST': '0.0.0.0',
'PASSWORD': 'qwerty123',
'PORT': '5432',
}
}
执行docker-compose up -d postgres 然后python manage.py runserver 会导致错误:
django.db.utils.OperationalError: could not translate host name "postgres" to address: Temporary failure in name resolution
如何正确配置 docker-compose.yml 以在 Django 设置中使用相同的 HOST? (例如,'HOST': '0.0.0.0' 或 'HOST': 'postgres' 对于这两个选项)。
我尝试在我的 django 和 postgres 服务上使用 network_mode: host。它工作正常,但有没有其他方法可以解决问题(例如,使用网络设置?我在他们的网站上阅读了 docker-compose 文档,但无法了解那里发生了什么)。
【问题讨论】:
-
0.0.0.0 是一个特殊的 IPv4 地址,意思是“无处不在”;您通常不会将其用作您显示的
HOST设置。 Docker 和非 Docker 环境不同,您需要不同的HOST设置;环境变量是一种典型的方法(对于非 Docker,默认为localhost,但在docker-compose.yml文件中提供替代值)。 -
我可以在 django 和 postgres 服务中使用
0.0.0.0地址吗?
标签: django postgresql docker docker-compose