我试图从postgres图像创建一个Dockerfile.回购说,应该通过在/docker-entrypoint-initdb.d/中放置一个shell脚本来处理初始化.我根据我在网上找到的一个例子提出了以下脚本:
#!/bin/bash
echo "******CREATING DOCKER DATABASE******"
gosu postgres postgres --single <<- EOsql
CREATE DATABASE orpheus;
CREATE USER docker WITH ENCRYPTED PASSWORD 'pwd_docker';
GRANT ALL PRIVILEGES ON DATABASE orpheus to docker;
CREATE TABLE profiles ( \
profile_id SERIAL UNIQUE PRIMARY KEY,\
user_id integer NOT NULL UNIQUE,\
profile_photo_id integer NOT NULL UNIQUE,\
age integer \
);
CREATE TABLE hidden_user ( \
owner_id integer NOT NULL PRIMARY KEY,\
target_id integer NOT NULL \
);
EOsql
echo ""
echo "******DOCKER DATABASE CREATED******"
反斜杠似乎是必需的,否则我得到一个解析错误.该脚本运行时没有错误,除了CREATE TABLE命令之外的所有命令似乎都有效.
是否在单用户模式下不支持表创建?如果是这样,有没有更好的方法让dockerfile设置一个包含在postgres中创建的表的图像?
@a_horse_with_no_name通过他的评论让我走上正轨.我决定放弃单用户模式,即使它是“推荐”.相反,我用pg_ctl启动postgres,加载一些包含我的表创建的sql文件,并使用pg_ctl停止服务器.
原文链接:https://www.f2er.com/docker/437063.html我的shell脚本如下所示:
#!/bin/bash
echo "******CREATING DOCKER DATABASE******"
echo "starting postgres"
gosu postgres pg_ctl -w start
echo "bootstrapping the postgres db"
gosu postgres psql -h localhost -p 5432 -U postgres -a -f /db/bootstrap.sql
echo "initializing tables"
gosu postgres psql -h localhost -p 5432 -U postgres -d orpheus -a -f /db/setup.sql
echo "stopping postgres"
gosu postgres pg_ctl stop
echo "stopped postgres"
echo ""
echo "******DOCKER DATABASE CREATED******"