docker数据库如何初始化(Docker启动PostgreSQL时创建多个数据库的解决方案)
类别:服务器 浏览量:221
时间:2021-10-03 01:06:13 docker数据库如何初始化
Docker启动PostgreSQL时创建多个数据库的解决方案1 前言在文章《Docker启动PostgreSQL并推荐几款连接工具》中我们介绍如何通过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
这是在开发测试阶段使用的方案,实际上把数据库放在容器中不是一个好的选择。
代码请查看:https://github.com/LarryDpk/pkslow-samples
到此这篇关于Docker启动PostgreSQL时创建多个数据库的文章就介绍到这了,更多相关Docker启动PostgreSQL内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- docker装redis(通过Docker部署Redis 6.x集群的方法)
- docker集群安装教程(使用docker部署hadoop集群的详细教程)
- docker容器如何更改tomcat端口(Docker方式启动tomcat访问首页出现404错误)
- docker镜像重启数据丢失(Docker数据备份恢复实现过程详解)
- elasticsearch启动报错(解决Docker启动Elasticsearch7.x报错的问题)
- docker从一个容器中退出来(Docker容器迁移到其他服务器的5种方法详解)
- docker清理脚本(Docker 清理的常用方法及问题)
- docker nginx 配置详解(Docker 如何安装 Nginx)
- docker分配容器资源(Mac为docker和kubectl添加自动补全命令的方法)
- docker怎么增加端口(docker 添加端口及获取dockerfile的方法)
- docker容器网络设置(对docker中的overlay式网络详解)
- linuxnfs服务教程(使用Docker的NFS-Ganesha镜像搭建nfs服务器的详细过程)
- docker脚本指定linux(在docker中执行linux shell命令的操作)
- docker 各种用法(详解Docker commit的使用)
- dockercompose的常用命令的作用(PIP安装docker-compose超时问题解决方案)
- docker添加mq基础镜像(Docker阿里云RocketMQ 4.5.1部署流程详解)
- 苹果自研芯片跑分对比 A16芯片排名靠后,M1系列霸榜(苹果自研芯片跑分对比)
- X86处理器的梦魇 苹果M1自研芯片到底有多强(苹果M1自研芯片到底有多强)
- 泰剧《爱欲之神》Boom kitkong和Great合体杂志(泰剧爱欲之神Boomkitkong和Great合体杂志)
- 素人恋爱综艺火药味十足 男生为赢得芳心集体扯头花,真是出好戏(素人恋爱综艺火药味十足)
- 《囧妈》为何受抵制 春节七部影片撤档背后的责任与博弈(囧妈为何受抵制)
- 提醒 2019年起河南驾考要开设科目五 官方回应来了(2019年起河南驾考要开设科目五)
热门推荐
- sql中trim函数用法(SQL中Truncate的用法)
- Get和Post的区别
- vue计算两个日期差几分钟(vue实现同时设置多个倒计时)
- Jquery中的offset()和position()的区别
- mysql数据类型及用法(MySQL数据库重命名的快速且安全方法3种)
- vue中什么时候需要set属性(Vue.set和this.$set使用和区别)
- iframe解决跨域问题(跨域修改iframe页面内容详解)
- 在python中如何删除指定的行(Python删除n行后的其他行方法)
- laravel怎么获取单个框架(laravel-admin自动生成模块,及相关基础配置方法)
- docker 重置容器的映射端口(运行中的docker容器端口映射如何修改详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9