在文章《》中我们介绍如何通过Docker
来启动PostgreSQL
,但只有一个数据库,如果想要创建多个数据库在同一个Docker
容器上怎么办呢?
一种方案是把shell/sql
脚本放入/docker-entrypoint-initdb.d/
目录中,让容器启动的时候自动执行创建;另一种是通过shell
脚本指定创建,本质是一样的。这里只介绍第一种。
把shell
脚本或sql
脚本放入指定目录,就会自动执行,两种脚本都可以。
shell
脚本例子如下:
#!/bin/bash set -e set -u function create_user_and_database() { local database=$1 echo " Creating user and database '$database'" psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL CREATE USER $database; CREATE DATABASE $database; GRANT ALL PRIVILEGES ON DATABASE $database TO $database; EOSQL } if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then echo "Multiple database creation requested: $POSTGRES_MULTIPLE_DATABASES" for db in $(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); do create_user_and_database $db done echo "Multiple databases created" fi
sql
脚本例子如下:
CREATE USER pkslowuser; CREATE DATABASE logdata; GRANT ALL PRIVILEGES ON DATABASE logdata TO pkslowuser; CREATE DATABASE orderdata; GRANT ALL PRIVILEGES ON DATABASE orderdata TO pkslowuser; CREATE DATABASE userdata; GRANT ALL PRIVILEGES ON DATABASE userdata TO pkslowuser;
准备Dockerfile
,把shell/sql
脚本文件放入镜像中去:
FROM postgres:10 COPY src/main/resources/create-multiple-postgresql-databases.sh /docker-entrypoint-initdb.d/ COPY src/main/resources/create-multiple-postgresql-databases.sql /docker-entrypoint-initdb.d/
启动如下:
docker run -itd \ --name pkslow-postgres \ -e POSTGRES_MULTIPLE_DATABASES=db1,db2 \ -e POSTGRES_USER=pkslow \ -e POSTGRES_PASSWORD=pkslow \ -p 5432:5432 \ pkslow/postgresql-multiple-databases:1.0-SNAPSHOT
启动成功后,就会创建如下数据库:
db1,db2, logdata,orderdata,userdata
这是在开发测试阶段使用的方案,实际上把数据库放在容器中不是一个好的选择。
代码请查看:
到此这篇关于Docker启动PostgreSQL时创建多个数据库的文章就介绍到这了,更多相关Docker启动PostgreSQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:ts@56dr.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2