Docker Compose,Django:角色"_"不存在

Ted*_*ddy 5 django postgresql docker docker-compose

上下文
我试图使用docker-compose在docker开发环境中运行我的Django应用程序和Postgres数据库(这是我第一次使用Docker).我希望将我的应用程序与自定义角色和数据库teddycrepineau一起使用(而不是使用默认的postgres用户和数据库).

目标
我的目标是通过django restapi部署一个由前端和后端驱动的web应用程序,整个在docker中运行.

系统/版本

  • python:3.7
  • django:2.1
  • 操作系统:Mac OS High Sierra

我得到什么错误
docker-compose up使用我的自定义角色和数据库运行时,我收到以下错误django.db.utils.OperationalError: FATAL: role "teddycrepineau" does not exist.当使用默认角色运行相同的命令时,db postgresDjango能够正常启动.

我的理解是运行docker-compose up会创建角色,db作为环境变量传递.

到目前为止
尝试过的东西我在这个网站上看到了多个威胁,GitHub和docker:

  • 试图删除我的容器并使用此处建议的格式重建它
  • 经历了这个 GitHub问题
  • 试图在我的环境变量从移动.env文件environment我里面docker-compose.yml的文件和重建我的容器

泊坞窗,compose.yml

version: '3'

volumes:
  postgres_data: {}

services:
  postgres:
    image: postgres
    volumes: 
      - postgres_data:/var/lib/postgresql/data
    env_file: .env
    ports:
      - "5432"

  django:
    build:
      context: teddycrepineau-backend
      dockerfile: teddycrepineau-root/Dockerfile
    command: ./teddycrepineau-backend/teddycrepineau-root/start.sh
    env_file: .env
    volumes: 
      - .:/teddycrepineau-backend
    ports:
      - "8000:8000"
    depends_on: 
      - postgres
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM python:3.7

ENV PYTHONUNBUFFERED 1

WORKDIR /teddycrepineau-backend/
ADD ./teddycrepineau-root/requirements.txt /teddycrepineau-backend/
RUN pip install -r requirements.txt
ADD . /teddycrepineau-backend/
RUN chmod +x ./teddycrepineau-root/start.sh
Run Code Online (Sandbox Code Playgroud)

start.sh

#!/usr/bin/env bash
python3 ./teddycrepineau-backend/teddycrepineau-root/manage.py runserver
Run Code Online (Sandbox Code Playgroud)

.ENV

POSTGRES_PASSWORD= 
POSTGRES_USER=teddycrepineau
POSTGRES_DB=teddycrepineau
Run Code Online (Sandbox Code Playgroud)

编辑

我的文件结构如下

root
 |___ teddycrepineau-backend
        |___ teddycrepineau-root
               |___ teddycrepineau
               |___ Dockerfile
               |___ manage.py
               |___ start.sh
 |___ teddycrepineau-frontend
        |___ React-App

 |___ .env
 |___ docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

当我将我的搬运工,compose.yml文件我的后端文件夹内,它会正常启动(虽然我不能够去时访问我的网站,127.0.0.1:8000但主要是一个不同的问题)自定义用户和数据库.当我将docker-compose.yml文件放到我的根文件夹时,我收到错误django.db.utils.OperationalError: FATAL: role "teddycrepineau" does not exist

Siy*_*iyu 8

这是因为您的pgsql db是在没有任何环境的情况下启动的。pgsql docker映像仅在您首次创建容器时使用env,之后将不会重新创建数据库和用户。

解决方案是删除pgsql卷,因此下次docker-compose up您将拥有一个读取了envs的新数据库。简单的方法是docker-compose down -v