【问题标题】:PostgreSQL Environment variables in Docker Compose 'No password has been set for the database'Docker Compose中的PostgreSQL环境变量'没有为数据库设置密码'
【发布时间】: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_PASSWORDdocker-entrypoint.sh 显式使用来初始化默认的数据库超级用户。 PGPASSWORD是客户端在建立连接时使用的。
  • 我对文档感到困惑,您经历的解决方案完美运行。非常感谢。

标签: python django postgresql docker docker-compose


【解决方案1】:

我对文档感到困惑。在下面的链接中,更清楚地说明了如何在 Docker 中为 PostgreSQL 使用环境变量:

https://github.com/docker-library/docs/tree/master/postgres#environment-variables

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2021-09-28
    • 2019-09-11
    • 2023-03-16
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多