我想用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发布于 2017-07-05 19:26:57
首先,您的Dockerfile示例无效。它应该只有一个FROM指令。删除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/的图像文档,我们可以使用POSTGRES_USER和POSTGRES_PASSWORD环境变量。POSTGRES_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开始时,这将初始化PostgreSQL数据库,用户名为aso,数据库为aso,密码为somepass。然后,您可以修改您的settings.py以使用这个用户名、数据库和密码。
我还要补充的是,如果您想在数据库启动期间运行其他任意的SQL或脚本,可以通过将sql或sh文件添加到/docker-entrypoint-initdb.d/的postgres映像中来实现。在https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image上阅读更多有关这方面的信息。
https://stackoverflow.com/questions/44932849
复制相似问题