Python 使用Django项目在Docker中创建postgresql数据库

Python 使用Django项目在Docker中创建postgresql数据库,python,django,postgresql,python-3.x,docker,Python,Django,Postgresql,Python 3.x,Docker,我想用我的Django项目在docker中创建postgresql数据库。我正在尝试使用init.sql文件执行此操作,但不起作用: settings.py: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'aso', 'USER': 'postgres', 'HOST': 'db', 'PORT':

我想用我的Django项目在docker中创建postgresql数据库。我正在尝试使用
init.sql
文件执行此操作,但不起作用:

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'aso',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}
init.sql

CREATE USER postgres;
CREATE DATABASE aso;
GRANT ALL PRIVILEGES ON DATABASE aso TO postgres;
我更新的
Dockerfile

FROM python:3.6.1
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip3 install -r requirements.txt
ADD . /code/
FROM library/postgres
ADD init.sql /docker-entrypoint-initdb.d/
不幸的是,我得到:

db_1   | LOG:  database system was shut down at 2017-07-05 14:02:41 UTC
web_1  | /usr/local/bin/docker-entrypoint.sh: line 145: exec: python3: not found
db_1   | LOG:  MultiXact member wraparound protections are now enabled
db_1   | LOG:  autovacuum launcher started
db_1   | LOG:  database system is ready to accept connections
dockerpri_web_1 exited with code 127
我也在尝试使用这个
Dockerfile

FROM python:3.6.1
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip3 install -r requirements.txt
ADD . /code/
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB aso
我的
docker compose.yml

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 PROJECT/backend/project/manage.py runserver 0.0.0.0:8001
    volumes:
      - .:/code
    ports:
      - "8001:8001"
    depends_on:
      - db

首先,您的
Dockerfile
示例无效。它应该只有一条来自指令的
。删除PostgreSQL内容,使其仅为:

FROM python:3.6.1
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip3 install -r requirements.txt
ADD . /code/
接下来,我将回答如何创建PostgreSQL用户和数据库的问题,因为您的
init.sql
就是这样做的

根据位于的
postgres
图像文档,我们可以使用
postgres\u用户
postgres\u密码
环境变量。
POSTGRES\u USER
变量将创建具有该用户权限的用户和数据库。对您的
docker compose.yml
进行修改的示例如下:

version: '3'

services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: aso
      POSTGRES_PASSWORD: somepass
  web:
    build: .
    command: python3 PROJECT/backend/project/manage.py runserver 0.0.0.0:8001
    volumes:
      - .:/code
    ports:
      - "8001:8001"
    depends_on:
      - db
启动时,这将使用用户名
aso
、数据库
aso
和密码
somepass
初始化PostgreSQL数据库。然后,您可以修改
设置.py
以使用此用户名、数据库和密码


我还要补充一点,如果您想在数据库启动期间运行其他任意SQL或脚本,可以通过将
SQL
sh
文件添加到
/docker entrypoint initdb.d/
处的
postgres
图像中来实现。有关此内容的更多信息,请访问。

似乎指向另一个Dockerfile。你试过用它来代替吗?我不确定你是指我在帖子中添加的内容吗?我想你可能对
Dockerfile
如何与多个
FROM
指令协同工作感到困惑。您也可以发布您的
docker compose.yml
?你目前正在做的是不可能的,但我可以提供一个建议。我将不胜感激。我已经更新了帖子。非常感谢,完美的答案,一切正常。