3

に私はでエントリポイントにドッキングウィンドウ-構成ENV-ファイルから変数を使用したいと思います:環境変数は、ドッキングウィンドウ-compose.yml

# environment.env 
    HOST=example.com 

    # docker-compose.yml 
    some_service: 
    ... 
    env_file: ['environment.env'] 
    entrypoint: ['myexecutable', '--host', '$HOST'] 

はそれをする方法はありますか?私は、唯一の解決策が見つかりました:

# docker-compose.yml 
    some_service: 
    ... 
    env_file: ['environment.env'] 
    entrypoint: sh -c 'myexecutable --host $$HOST' 

をしかし、それは(2つのプロセスが存在しますので:shmyexecutable)ドッキングウィンドウの概念「コンテナごとに一つのプロセスを」違反になります。そして容器が正常に止まらないので、私はdocker killまたはdocker-compose killでそれを殺さなければなりません。

答えて

1

とドッキングウィンドウ・コンファイル内でそれを使用することができますプロセスではsh -c 'exec myexecutable --host ...'を実行して、単一のプロセスとして引き継ぎます。 「コンテナごとに1つのプロセス」とは、通常、プロセス管理者を実行しないことを意味します。あるプロセスが他のプロセスを開始することは珍しいことではありません。

コマンドがSIGTERMで正しく終了するようにするには、明示的なシグナルハンドラを設定する必要があります。これは、bashのtrapで、またはアプリケーション自体で行うことができます。関連項目https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop

+0

Entrypoint 'exec myexecutable'が動作しません:' Containerコマンドが見つからないか存在しません。 ;エントリポイント 'sh -c 'exec myexecutable --host $$ HOST''は、ドッカーの哲学による正しい解決策でしょうか? –

+0

申し訳ありませんが、私は 'sh -c 'exec ...' – dnephin

0

私はENVファイルについてはよく分からないが、それはあなたのシェルセッションですでに環境変数の場合は、1つだけを持っているしたい場合は、${your_env_var_here}

+0

サービスの設定が格納されているため、質問はenv-fileに関するものです... –