bash – 如何在Docker Postgres的脚本中创建用户/数据库
我一直在试图建立一个开发postgres实例的容器,通过创建一个自定义用户&数据库。我使用
official postgres docker image.在文档中,它指示您在/docker-entrypoint-initdb.d/文件夹中插入一个bash脚本以使用任何自定义参数设置数据库。
我的bash脚本:make_db.sh su postgres -c "createuser -w -d -r -s docker" su postgres -c "createdb -O docker docker" Dockerfile FROM library/postgres RUN ["mkdir","/docker-entrypoint-initdb.d"] ADD make_db.sh /docker-entrypoint-initdb.d/ 我从docker日志中获取的错误-f db(db是我的容器名称)是: createuser:无法连接到数据库postgres:无法连接到服务器:没有这样的文件或目录 似乎在/docker-entrypoint-initdb.d/文件夹中的命令在postgres启动之前正在执行。我的问题是,如何使用官方postgres容器以编程方式设置用户/数据库?有任何方法来做这个用脚本吗?
编辑 – 自2015年7月23日
official postgres docker image将运行/docker-entrypoint-initdb.d/文件夹中的.sql脚本。 所以你需要的是创建以下sql脚本: init.sql CREATE USER docker; CREATE DATABASE docker; GRANT ALL PRIVILEGES ON DATABASE docker TO docker; 并将其添加到Dockerfile中: Dockerfile FROM library/postgres ADD init.sql /docker-entrypoint-initdb.d/ 但是从2015年7月8日起,如果你需要的只是创建一个用户和数据库,那么更容易使用POSTGRES_USER,POSTGRES_PASSWORD和POSTGRES_DB环境变量: docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres 或使用Dockerfile: FROM library/postgres ENV POSTGRES_USER docker ENV POSTGRES_PASSWORD docker ENV POSTGRES_DB docker 适用于2015年7月23日之前的图片 从the documentation of the postgres Docker image,据说
这里重要的是“启动服务之前”。这意味着您的脚本make_db.sh将在postgres服务启动之前执行,因此错误消息“无法连接到数据库postgres”。 之后,还有一个有用的信息:
同意这可能有点神秘在第一眼看。它说的是,您的初始化脚本应该在执行其操作之前以单一模式启动postgres服务。所以你可以改变你的make_db.ksh脚本如下,它应该让你更接近你想要的: 注意,这已更改最近in the following commit.这将与最新的更改: export PGUSER=postgres psql <<- EOSQL CREATE USER docker; CREATE DATABASE docker; GRANT ALL PRIVILEGES ON DATABASE docker TO docker; EOSQL 以前,需要使用 – 单独模式: gosu postgres postgres --single <<- EOSQL CREATE USER docker; CREATE DATABASE docker; GRANT ALL PRIVILEGES ON DATABASE docker TO docker; EOSQL (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |