使用docker-compose在Postgresql数据库中创建表
我正在使用docker-compose部署多容器python Flask
Web应用程序。我在理解如何在构建期间如何在postgresql数据库" title="postgresql数据库">postgresql数据库中创建表时遇到了困难,因此我不必使用psql手动添加它们。
我的docker-compose.yml文件是:
web: restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/flask-app/static
env_file: .env
command: /usr/local/bin/gunicorn -w 2 -b :8000 app:app
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes:
- /www/static
volumes_from:
- web
links:
- web:web
data:
restart: always
image: postgres:latest
volumes:
- /var/lib/postgresql
command: "true"
postgres:
restart: always
image: postgres:latest
volumes_from:
- data
ports:
- "5432:5432"
我不想输入psql来输入:
CREATE DATABASE my_database;CREATE USER this_user WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE "my_database" to this_user;
\i create_tables.sql
我将对如何创建表的指导表示赞赏。
回答:
我不想输入psql来输入
您可以简单地使用容器的内置init机制:
COPY init.sql /docker-entrypoint-initdb.d/10-init.sql
这样可以确保在正确启动数据库服务器后执行您的sql。
看一看他们的入口点脚本。它做了一些准备工作,以正确和外观到启动PSQL /docker-entrypoint-
initdb.d/目录在结尾的文件.sh
,.sql
和.sql.gz
。
10-
文件名中的原因是因为文件以ASCII顺序处理。你能说出你的其他的init文件,如20-create-tables.sql
和30-seed-
tables.sql.gz例如,并确保他们在需要的顺序进行处理。
另请注意,调用命令未指定数据库。如果要迁移到docker-compose并且现有.sql
文件也未指定DB ,请记住这一点。
不过,您的文件将在容器的第一个开始build
阶段进行处理。由于Docker
Compose会先停止映像然后再恢复图像,所以几乎没有什么区别,但是如果您在build
阶段初始化数据库至关重要,我建议您仍然使用内置的init方法,方法是/docker-
entrypoint.sh从dockerfile 调用然后在/docker-entrypoint-initdb.d/
目录中进行清理。
以上是 使用docker-compose在Postgresql数据库中创建表 的全部内容, 来源链接: utcz.com/qa/428467.html