bash – 如何在Docker Postgres的脚本中创建用户/数据库

前端之家收集整理的这篇文章主要介绍了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,据说

[…] it will source any *.sh script found in that directory [/docker-entrypoint-initdb.d] to do further initialization before starting the service

这里重要的是“启动服务之前”。这意味着您的脚本make_db.sh将在postgres服务启动之前执行,因此错误消息“无法连接到数据库postgres”。

之后,还有一个有用的信息:

If you need to execute sql commands as part of your initialization,the use of Postgres single user mode is highly recommended.

同意这可能有点神秘在第一眼看。它说的是,您的初始化脚本应该在执行其操作之前以单一模式启动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
原文链接:https://www.f2er.com/bash/391997.html

猜你在找的Bash相关文章