编辑-自2015年7月23日起
在正式的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 dockerENV POSTGRES_PASSWORD dockerENV POSTGRES_DB docker
适用于2015年7月23日之前的图像
从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
以前,需要使用
--singlemode:
gosu postgres postgres --single <<- EOSQL CREATE USER docker; CREATE DATAbase docker; GRANT ALL PRIVILEGES ON DATAbase docker TO docker;EOSQL



