我有一个django和postgres集装箱。当django应用迁移时,它不会看到我命名为pgdb的postgres容器,并得到以下错误:
django.db.utils.OperationalError:无法将主机名"pgdb“转换为地址:名称解析中的临时失败
似乎没有名为"pgdb“的坞容器。如果我运行“docker-组合运行pgdb”,它将在"app“组下创建一个名为"app_pgdb_run_23423423”的postgres容器。有趣的是,我以前使用过这个settings.py设置和"pgdb“postgres容器名称。根本的问题是什么?
可以从https://github.com/UberStreuner/mailing-service克隆完整的代码。
我的settings.py设置,环境变量肯定不是错的。
DATABASES = {
'default': {
'ENGINE': os.environ.get('DB_ENGINE', 'django.db.backends.postgresql_psycopg2'),
'NAME': os.environ.get('POSTGRES_DB'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
'HOST': os.environ.get('POSTGRES_HOST', 'pgdb'),
'PORT': os.environ.get('POSTGRES_PORT', '5432')
}
}docker-compose.yml
version: "3.8"
services:
django:
build: .
container_name: django
command: ./docker-entrypoint.sh
volumes:
- .:/usr/src/app/
ports:
- "8000:8000"
env_file:
- ./.dev.env
depends_on:
- pgdb
- redis
celery:
build: .
command: celery -A mailing worker -l INFO
volumes:
- .:/usr/src/app/
env_file:
- ./.dev.env
depends_on:
- django
- redis
- pgdb
celery-beat:
build: .
command: celery -A mailing beat -l INFO
volumes:
- .:/usr/src/app/
env_file:
- ./.dev.env
depends_on:
- django
- redis
- pgdb
pgdb:
image: postgres
container_name: pgdb
env_file:
- ./.dev.env
volumes:
- pgdata:/var/lib/postgresql/data
expose:
- "5432"
ports:
- "5432:5432"
redis:
image: "redis:alpine"
volumes:
pgdata:.dev.env
SECRET_KEY=django-insecure-kh8ot+ag-^osyhg5itzj!iw_g#dklw3f75c0)^-7)*@^)#tc#x
DEBUG=1
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1
CELERY_BROKER=redis://redis:6379/0
CELERY_BACKEND=redis://redis:6379/0
POSTGRES_DB=django_postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=passworddocker-entrypoint.sh
#!/bin/bash
python manage.py migrate
python manage.py runserver 0.0.0.0:8000发布于 2022-05-27 15:58:04
我解决了这个问题。这可能是因为我从python通过.dev.env文件导入了Django的环境变量,从docker-复合导入了作为env_file传递的Django的环境变量。因此,我注释掉了来自settings.py的dotenv加载,它起了作用。
https://stackoverflow.com/questions/72394938
复制相似问题