【发布时间】:2019-08-26 17:24:44
【问题描述】:
我正在使用 Django 开发一个项目,并尝试将 .env 文件加载到我的 docker-compose.yml 脚本中的 PostgreSQL 映像中。但是,由于某种原因,我无法加载它们。
运行“docker-compose up”命令后,我从db_1 收到的警告之一如下:
.
.
.
db_1 | ****************************************************
db_1 | WARNING: No password has been set for the database.
db_1 | This will allow anyone with access to the
db_1 | Postgres port to access your database. In
db_1 | Docker's default configuration, this is
db_1 | effectively any other container on the same
db_1 | system.
db_1 |
db_1 | Use "-e POSTGRES_PASSWORD=password" to set
db_1 | it in "docker run".
db_1 | ****************************************************
.
.
.
为了帮助重现问题,这是我的文件夹结构:
我的项目结构:
├── config/
│ ├── .env
├── src/
│ ├── manage.py
│ └── core
│ | ├── __init__.py
│ | ├── settings.py
│ | ├── urls.py
│ | ├── wsgi.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt
我的Dockerfile:
FROM python:3.7.0
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
我的 docker-compose.yml:
version: '2'
services:
db:
image: postgres
restart: always
env_file:
- ./config/.env
web:
build: .
stdin_open: true
tty: true
command: python src/manage.py runserver 0.0.0.0:8000
restart: always
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
我的 .env 文件:
PGUSER=admin
PGDATABASE=db
PGPASSWORD=s3cr3t
PGHOST=h0st
PGPORT=5432
有趣的一点是,我能够使用dotenv 库将环境变量加载到settings.py 中,问题实际上是在PostgreSQL 映像中设置环境变量。
我正在遵循 PostgreSQL 本身指定的环境变量的这种逻辑: https://www.postgresql.org/docs/10/libpq-envars.html
【问题讨论】:
-
错误提示在您的
.env文件PGPASSWORD中设置POSTGRES_PASSWORD。改成POSTGRES_PASSWORD试试看 -
很确定你需要两者——
POSTGRES_PASSWORD被docker-entrypoint.sh显式使用来初始化默认的数据库超级用户。PGPASSWORD是客户端在建立连接时使用的。 -
我对文档感到困惑,您经历的解决方案完美运行。非常感谢。
标签: python django postgresql docker docker-compose