用Django项目在Docker中创buildpostgresql数据库
我想用我的Django项目在docker中创buildpostgresql数据库。 我正在尝试使用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
示例无效。 它应该只有一个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/
接下来,我将回答如何创buildPostgreSQL用户和数据库的问题,因为这就是您的init.sql
正在做的事情。
根据https://hub.docker.com/_/postgres/上的postgres
映像文档,我们可以使用POSTGRES_USER
和POSTGRES_PASSWORD
环境variables。 POSTGRES_USER
variables将创build一个具有该用户特权的用户和数据库。 一个修改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
在开始时,这将使用用户名somepass
, somepass
数据库和somepass
密码初始化PostgreSQL数据库。 然后,你可以修改你的settings.py
来使用这个用户名,数据库和密码。
我还要补充一点,如果你想在数据库启动时运行其他任意的SQL或者脚本,你可以通过在/docker-entrypoint-initdb.d/
的postgres
映像中添加sql
或sh
文件来/docker-entrypoint-initdb.d/
。 阅读更多关于这个在https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image 。
- Django – 默认端口0而不是3306 – 无法连接到“127.0.0.1”(61)上的MySQL服务器
- 为什么在安装官方的Django docker镜像之后我不能`docker exec`?
- 获取“无效的地址”错误上gunicorn绑定与我的服务器IP。 我在docker里试着这个
- Django的docker容器无法连接到MySQL容器,错误“无法连接到'db'(111)上的MySQL服务器”)
- Docker和Django manage.py
- Django应用程序服务器挂起/不会在Docker Compose中启动
- Docker:暴露的端口不能在另一个容器中访问
- 不使用docker-compose和django提供静态文件的Nginx(13:权限被拒绝)
- 在Docker容器中创builddjango超级用户而不input密码