私はdocker-composeを介してRancherを介してサービスを提供しています。私が直面している問題は、コンテナが展開された後にパスワードを設定する必要があるということです。
ランチャーシークレットの動作方法は、シークレットを設定すると、ランチャーがコンテナにボリュームをマウントし、シークレットを含むファイルを作成することです。スクリプトを実行してそのシークレットを取得し、それを設定ファイルのパスワードとして設定できることを望んでいました。
秘密をgitに入れたくないので、Dockerfileを介してその秘密を取得する方法があるとは思わないので、docker-composeを使用してそれを行うことを検討しています。
これが可能かどうかは誰にもわかりますか?
秘Theは、元のコマンドを呼び出す前に必要な初期化アクションを実行するために、composeコマンドを上書きすることです。
init.sh
と呼びましょう。画像に追加します。Dockerfile:
FROM: sourceimage:tag
COPY init.sh /usr/local/bin/
docker-compose.yml:
services:
myservice:
image: something:tag
...
command: /usr/local/bin/init.sh && exec the_original_command_goes_here
メインコマンドを呼び出す前にexec
を使用することが重要です。これにより、コマンドが最初のプロセス(PID1)としてインストールされ、stopやkillなどのシグナルを受信できるようになります。
docker-composeは、既存の実行中のコンテナを変更する方法ではなく、コンテナを起動する方法を指定します。
Rancher documentation には、秘密のデフォルトの使用法として、docker-compose.yml
のsecrets配列の名前で秘密を参照できることが記載されています。
ターゲットファイル名は、シークレットの名前と同じ名前になります。
デフォルトでは、ターゲットファイル名はユーザーIDおよびグループID 0、ファイルモード0444として作成されます。
シークレットパーツでexternalをtrueに設定すると、シークレットが既に作成されていることを確認できます。基本的な
docker-compose.yml
の例:
version: '2'
services:
web:
image: sdelements/lets-chat
stdin_open: true
secrets:
- name-of-secret
labels:
io.rancher.container.pull_image: always
secrets:
name-of-secret:
external: true
「 実行中の1つのdocker-composeコンテナを更新する方法 」に示すように、コンテナの更新には「ビルド、キル、およびアップ」シーケンスが含まれます。
docker-compose up -d --no-deps --build <service_name>