私はドッカーコンテナの中でpostgresqlを実行しています。私のシステムは、1回のセットアップとランタイムという2つの部分に分かれています。 1時間のセットアップを実行している場合は、私が入力したユーザー名、パスワード、およびDBNAMEを、ユーザーを取得し、それらの名前を持つスーパーユーザとデータベースを作成します。ドッカーファイルを取得して環境変数を評価するにはどうすればいいですか?
docker run -e USERNAME=user -e PASSWORD=admin -e DBNAME=test myImage
はここでドッキングウィンドウのファイルdockerfileからの抜粋です:
RUN /etc/init.d/postgresql start && psql --command "CREATE USER $USERNAME WITH SUPERUSER PASSWORD '$PASSWORD';" && createdb -O $USERNAME $DBNAME
私はこのすべてを定数のユーザー名、パスワード、およびデータベース名でテストしましたが、周囲の環境変数を渡そうとすると動作しないようです。環境変数がdockerfileによって拡張されていないと述べた記事を先に読んだと思いますが、環境変数がこの情報をdockerに渡す最善の方法であるという矛盾した情報も聞いてきました。
上記のスニペットを機能させるにはどうすればよいですか?ドッカーに環境変数を評価させるために誤った構文を使用していますか?
実行中のコンテナを調べて、環境変数が正しく設定されていることを確認しました。
ありがとう、私はいくつかのチュートリアルを見てきましたが、それを少し良く理解していますが、さらに関連する質問があります。この特定のイメージでは、すべてのインストールで同じように実行する必要があるので、ENTRYPOINTを使用する必要がありますが、3つのコマンドを順番に実行したい(開始、スーパーユーザー作成、createdb)。これをどのように指定するのですか?チュートリアルでは、複数のエントリポイントがある場合は、最後のエントリポイントのみが使用されると述べています。 – Andy
イメージにシェルスクリプトを追加できます。それ以外の場合は、セミコロンで区切ってコマンドを1つのライナーにまとめることができます。 – ateles
CMDとENTRYPOINTの違いを理解するには、https://hub.docker.com/r/k3ck3c/nethogs/をご覧ください。実行するとwlan0を監視し、ra1を監視する場合はra1を追加します'docker run'コマンドの最後に、3つのコマンドを実行するために' command1; command2; command3' – user2915097