2016-12-21 5 views
0

私はMinikubeでDjangoアプリケーションを展開しようとしています。しかし、いずれかのコンテナでは、特定のタスクのために画像にrootを入れてから、postgresのユーザーにいくつかのデータベースを作成してから、rootに戻ってより多くのコマンドを実行する必要があります。Dockerのルートユーザーと非ルートユーザーの切り替え

ドッカーのためにUSERの機能を使用することができますが、私はどのユーザーにいるかによって特定のタスクが壊れてしまいます。su - postgresを実行しようとしましたが、コマンドが端末からのものでなければならないというエラーを返します。 。

これを修正する方法についてのご意見はありますか?

+0

要するに短い情報ですが、これはドッカーのことではありません。それはOSのことです。通常のように、シェルスクリプトでユーザーを反転させることができます。または、プロセスごとに1つのコンテナを行い、ポストグルを分割します。 – user2105103

答えて

1

代表的なツールはgosuです。あなたのコンテナに含まれている場合は、gosu postgres $cmdを実行してください。コマンドは実行する必要があります。あなたがエントリーポイントスクリプトの終わりにコンテナ内で実行している必要がある唯一のコマンドであれば、exec gosu postgres $cmdでしょう。ゴスのページには、ツールを使用する理由の詳細が含まれています。主な理由は、TTYとシグナル処理です。 readmeの終わりには、考慮する価値のある他のいくつかの選択肢がリストされていることに注意してください。

+0

私の 'entrypoint.sh'に' gosu'を実行するのですか?それともDockerfileで実行するのですか? –

+0

気にしない、私はもう少しドキュメントを見て、これは完璧です、ありがとう! –

0

コンテナが公式Postgres imageに基づいていると言うならば、あなたはコンテナの/docker-entrypoint-initdb.dフォルダにすべてのあなたのrootタスクのためのスクリプトとCOPYそのスクリプトを作成してみてください。 .sql.shのスクリプトがこのフォルダ内で実行されますの後にとentrypoint scriptのようにgosu postgresが入ります。

initdbを2つのセットの間に挟む必要がある場合は、独自のエントリポイントスクリプトを作成する必要があります。

関連する問題