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

时间:2017-08-27 14:31:10

标签: django postgresql docker environment-variables docker-compose

官方网站says,如果您想构建postgresql数据库,只需输入varibles 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 sript是使它工作的唯一方法吗?
  2. 如果我不明确要求,我怎么写它以及把它放在哪里 写密码的感觉信息,我想使用.env文件,因为我将在公共回购中存储.sql脚本?
  3. 我的.env文件

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

    我的docker-compose文件:

    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"]
    

1 个答案:

答案 0 :(得分:2)

好像你使用了不正确的变量名。将POSTGRESQL_USERNAME更改为POSTGRES_USER,依此类推.env文件

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

的数据库

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