[解決済み】Docker Postgresのスクリプトでユーザー/データベースを作成する方法
質問
カスタムユーザ&データベースを作成し、開発用 postgres インスタンスのコンテナをセットアップしようとしています。私は
Postgres公式Dockerイメージ
. ドキュメントでは、bash スクリプトを
/docker-entrypoint-initdb.d/
フォルダで、任意のカスタムパラメータを使用してデータベースをセットアップします。
私のbashスクリプト:make_db.sh
su postgres -c "createuser -w -d -r -s docker"
su postgres -c "createdb -O docker docker"
Dockerfile
FROM library/postgres
RUN ["mkdir", "/docker-entrypoint-initdb.d"]
ADD make_db.sh /docker-entrypoint-initdb.d/
というエラーが表示されます。
docker logs -f db
(dbは私のコンテナ名)です。
createuser: データベースに接続できませんでした postgres: サーバーに接続できませんでした。そのようなファイルやディレクトリはありません
の中のコマンドは、どうやら
/docker-entrypoint-initdb.d/
フォルダは、postgres が起動する前に実行されています。質問ですが、公式のpostgresコンテナを使用してプログラム的にユーザー/データベースをセットアップするにはどうすればよいのでしょうか?スクリプトでこれを行う方法はあるのでしょうか?
解決方法は?
EDIT - 2015年7月23日より
は
公式の postgres docker イメージ
が実行されます。
.sql
スクリプトは
/docker-entrypoint-initdb.d/
フォルダーに格納されます。
つまり、以下のようなSQLスクリプトを作成すればよいのです。
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
を作成し、Dockerfileに追加してください。
ドッカーファイル
FROM library/postgres
COPY 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/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
2015/07/23より古い画像について
から postgres Dockerイメージのドキュメント は、次のように言われています。
<ブロッククオート
[...] そのディレクトリにあるすべての *.sh スクリプトをソースとして使用します [...
/docker-entrypoint-initdb.d
サービスを開始する前に、さらなる初期化を行うために、[ ]をクリックします。
ここで重要なのは サービスを開始する前に"。 . これは、あなたのスクリプト make_db.sh は postgres サービスが開始される前に実行されるため、エラーメッセージが表示されます。 データベースpostgres"に接続できませんでした。 .
この後、もう一つ有用な情報があります。
初期化の一環としてSQLコマンドを実行する必要がある場合、Postgresのシングルユーザーモードの使用を強く推奨します。
確かに、これは一見すると謎めいていますね。これは、初期化スクリプトを実行する前に、postgresサービスをシングルモードで開始する必要があるということです。そのため make_db.ksh スクリプトを次のように実行すれば、希望に近づくはずです。
注意 最近変更されました。 は以下のコミットで . これは、最新の変更で動作します。
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
以前は
--single
モードが必要でした。
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
関連
-
[解決済み] bashでのDiffコマンド
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bashでjsonファイルを解析するために、jqの出力にあるダブルクオートを削除する方法は?
-
[解決済み] /bin/sh: apt-get: 見つかりません。
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] mkdir コマンドが bash スクリプトで見つかりません。
-
[解決済み] openstack の google-chrome-stable ubuntu12 パッケージが見つかりません。
-
[解決済み] cygwin の ssh が終了時に "Killed by signal 1" と表示される
-
[解決済み] bash file returns unexpected token `$'dottpr''
-
[解決済み] AWS CLIのプロファイルを一時的に切り替えるには?
-
[解決済み] IPアドレスのまとめ方
-
[解決済み] ターミナルでbashスクリプトを実行するにはどうすればよいですか?