Ted*_*ddy 5 django postgresql docker docker-compose
上下文
我试图使用docker-compose在docker开发环境中运行我的Django应用程序和Postgres数据库(这是我第一次使用Docker).我希望将我的应用程序与自定义角色和数据库teddycrepineau一起使用(而不是使用默认的postgres用户和数据库).
目标
我的目标是通过django restapi部署一个由前端和后端驱动的web应用程序,整个在docker中运行.
系统/版本
我得到什么错误
当docker-compose up使用我的自定义角色和数据库运行时,我收到以下错误django.db.utils.OperationalError: FATAL: role "teddycrepineau" does not exist.当使用默认角色运行相同的命令时,db postgresDjango能够正常启动.
我的理解是运行docker-compose up会创建角色,db作为环境变量传递.
到目前为止
我尝试过的东西我在这个网站上看到了多个威胁,GitHub和docker:
泊坞窗,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
这是因为您的pgsql db是在没有任何环境的情况下启动的。pgsql docker映像仅在您首次创建容器时使用env,之后将不会重新创建数据库和用户。
解决方案是删除pgsql卷,因此下次docker-compose up您将拥有一个读取了envs的新数据库。简单的方法是docker-compose down -v
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |