首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Django项目在Docker中创建postgresql数据库

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

Stack Overflow用户
提问于 2017-07-05 17:46:33
回答 1查看 2.6K关注 0票数 4

我想用Django项目在docker中创建postgresql数据库。我试图使用init.sql文件来完成它,但是它不起作用:

settings.py

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'aso',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

init.sql

代码语言:javascript
复制
CREATE USER postgres;
CREATE DATABASE aso;
GRANT ALL PRIVILEGES ON DATABASE aso TO postgres;

我更新的Dockerfile

代码语言:javascript
复制
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/

不幸的是我得到了:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 19:26:57

首先,您的Dockerfile示例无效。它应该只有一个FROM指令。删除PostgreSQL内容,因此它只是:

代码语言:javascript
复制
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/的图像文档,我们可以使用POSTGRES_USERPOSTGRES_PASSWORD环境变量。POSTGRES_USER变量将创建一个具有该用户特权的用户和数据库。修改您的docker-compose.yml的一个例子是:

代码语言:javascript
复制
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

开始时,这将初始化PostgreSQL数据库,用户名为aso,数据库为aso,密码为somepass。然后,您可以修改您的settings.py以使用这个用户名、数据库和密码。

我还要补充的是,如果您想在数据库启动期间运行其他任意的SQL或脚本,可以通过将sqlsh文件添加到/docker-entrypoint-initdb.d/postgres映像中来实现。在https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image上阅读更多有关这方面的信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44932849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档