无法使用默认的 postgresql docker 镜像创建数据库



官方网站说,如果你想构建postgresql databse,只需将变量放在POSTGRES_USER, POSTGRES_PASSWORD and POSTGRES_DB。我把它们放到 .env 文件中并写入docker-compose文件env_file: ./.env,但随后 django 说:django.db.utils.OperationalError: FATAL: database "languages" does not exist.这意味着我应该使用命令编写.sql脚本。问题:

  1. 写.sql是让它工作的唯一方法吗?
  2. 如果我不想明确,我该怎么写以及把它放在哪里 写密码等有意义的信息,我想使用 .env 文件,因为我会将.sql脚本存储在公共存储库中?

我的 .env 文件

DEBUG=True
SECRET_KEY=...
POSTGRESQL_DATABASE=languages
POSTGRESQL_USERNAME=admin
POSTGRESQL_PASSWORD=pass
POSTGRESQL_ADDRESS=postgres
POSTGRES_DB=languages

我的码头工人撰写文件:

version: '3'
services:
web:
build: ./web 
env_file: ./web/microservice/.env
volumes:
- ./web:/code/
depends_on:
- postgres
command: python manage.py runserver 0.0.0.0:8000
nginx:
build: ./nginx/
ports:
- "80:80"
- "443:443"
volumes:
- ./web/static:/code/static
depends_on:
- web
postgres:
image: postgres:latest
ports:
- "5432:5432"
env_file: ./web/microservice/.env
volumes:
- /var/lib/postgresql/data/

Dockefile

FROM python:3.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD ./requirements.txt /code/
RUN pip install --no-cache-dir -r requirements.txt
ADD . /code/
EXPOSE 8000
CMD ["/usr/local/bin/gunicorn", "translation_microservice.wsgi", "-w", "2", "-b", ":8000", "--access-logfile", "-", "--capture-output"]

似乎您使用了不正确的变量名称。将 .env 文件中的POSTGRESQL_USERNAME更改为POSTGRES_USER

如果包含数据库的 docker 卷已使用其他环境构建,则可能必须清除该卷。默认设置是创建一个名为postgres的用户和数据库

不要将 .env 文件添加到公共存储库。

最新更新