【发布时间】:2015-05-06 02:49:29
【问题描述】:
我正在尝试从 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 中创建的表的图像?
【问题讨论】:
-
单用户模式仅用于灾难恢复:postgresql.nabble.com/… 问题是:你为什么要在单用户模式下启动 Postgres?
-
在官方 docker repo 中推荐用于 postgres。 “如果您需要在初始化过程中执行 SQL 命令,强烈建议使用 Postgres 单用户模式。” - registry.hub.docker.com/_/postgres
-
这显然是个坏建议
-
@a_horse_with_no_name 我认为他们试图避免数据库在所需的初始化完成之前出现并可用于一般连接。以
listen_addresses = ''启动它并使用unix 套接字或postgres的listen_addresses = '127.0.0.1, ::1' (via the-c` 参数并使用环回psql会话会更加明智,做你需要做的事情,然后重新启动Pg 用于一般访问,但大多数时候 Docker 人员似乎更喜欢快速破解而不是强大的解决方案......
标签: postgresql docker dockerfile