如何在Docker Postgres的脚本中创建用户/数据库
我一直在尝试通过创建自定义用户和数据库来为开发postgres实例设置容器。我正在使用官方的postgres
docker镜像。在文档中,它指示您在/docker-
entrypoint-initdb.d/文件夹内插入bash脚本以使用任何自定义参数设置数据库。
回答:
su postgres -c "createuser -w -d -r -s docker"su postgres -c "createdb -O docker docker"
回答:
FROM library/postgresRUN ["mkdir", "/docker-entrypoint-initdb.d"]
ADD make_db.sh /docker-entrypoint-initdb.d/
我从docker logs -f db
(db是我的容器名称)得到的错误是:
createuser:无法连接到数据库postgres:无法连接到服务器:没有这样的文件或目录
/docker-entrypoint-
initdb.d/在启动postgres之前,似乎正在执行文件夹内的命令。我的问题是,如何使用官方的postgres容器以编程方式设置用户/数据库?有什么办法可以用脚本做到这一点?
回答:
回答:
在正式的Postgresdocker图像将运行.sql
脚本中找到的/docker-
entrypoint-initdb.d/文件夹中。
因此,您所需要做的就是创建以下sql脚本:
初始化程序
CREATE USER docker;CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
并将其添加到您的Dockerfile中:
Docker文件
FROM library/postgresCOPY 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/postgresENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
回答:
从postgres Docker映像的文档中可以说,
[…]它将启动在该目录[
/docker-entrypoint-initdb.d
]中找到的任何* .sh脚本,以在启动服务之前进行进一步的初始化
这里重要的是 “启动服务之前” 。这意味着您的脚本 make_db.sh 将在启动postgres服务之前执行,因此错误消息
“无法连接到数据库postgres” 。
之后,还有另一条有用的信息:
如果您需要在初始化过程中执行SQL命令,则强烈建议使用Postgres单用户模式。
同意这乍看起来可能有些神秘。它表示您的初始化脚本在执行操作之前应以单一模式启动postgres服务。因此,您可以按以下方式更改 make_db.ksh
脚本,它应该使您更接近所需的内容:
,这在最近的提交中已更改。这将适用于最新更改:
export PGUSER=postgrespsql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
以前,需要使用--single
mode:
gosu postgres postgres --single <<- EOSQL CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
以上是 如何在Docker Postgres的脚本中创建用户/数据库 的全部内容, 来源链接: utcz.com/qa/424115.html