我试图从 postgres 图像创建一个 Dockerfile。repo 说初始化应该通过在 /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 中创建的表的图像?