我正在尝试从postgres镜像创建Dockerfile。存储库表示,初始化应由将shell脚本放置在/docker-entrypoint-initdb.d/中处理。我按照在线示例编写了以下脚本:
#!/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中设置图像并创建表格?
listen_addresses = ''
并使用unix套接字或listen_addresses ='127.0.0.1, ::1'(通过
postgres的
-c参数)并使用回环
psql`会话来启动它,执行所需操作,然后重新启动Pg以进行一般访问,但是Docker的人似乎更喜欢快速解决方案而不是健壮的解决方案... - Craig Ringer