2017-02-10 1 views
7

ドッキングウィンドウ-compose.yml私は.envファイルを変更した場合docker-composeコンテナの環境変数を最小のダウンタイムで再読み込みするにはどうすればよいですか?

version: '2' 
services: 
    app: 
    build: 
     context: . 
    command: python src/app.py 
    restart: on-failure 
    depends_on: 
     - db 
    environment: 
     - TJBOT_DB_HOST=db 
     - TJBOT_API_KEY 
     - TJBOT_AUTO_QUESTION_TIME 
    env_file: 
     - .env 
    db: 
    image: mongo:3.0.14 
    volumes: 
     - mongodbdata:/data/db 
volumes: 
    mongodbdata: 

は、どのように私は、最小限のダウンタイムで、新しい環境変数を使用するには、コンテナをリロードだろうか?

+0

「ダウン」、「アップ」以外の良い方法は考えられません。もしあなたがそれをしたくなければ、 'docker exec'の周りのいくつかのハックな恐怖?彼らがそれを変えれば、彼らを領事のようなものに外生化させるかもしれませんか? – johnharris85

+0

問題は、 'down'と' up'を使ってすべてのサービスをリロードするのですが、アプリケーションサービスだけをリロードしたいのです。私はこれが最も簡単な方法だと思っていますが、多くのサービスではしばらく時間がかかります。 –

答えて

12

yockをdocker-composeで実行している場合は、docker-compose up -dを実行するだけで、変更が加えられたすべてのコンテナが再作成され、変更されていないすべてのサービスは変更されません。

$ cat docker-compose.env2.yml 
version: '2' 

services: 
    test: 
    image: busybox 
    # command: env 
    command: tail -f /dev/null 
    environment: 
     - MY_VAR=hello 
     - MY_VAR2=world 
    test2: 
    image: busybox 
    command: tail -f /dev/null 
    environment: 
     - MY_VAR=same ole same ole 

$ docker-compose -f docker-compose.env2.yml up -d            
Creating network "test_default" with the default driver 
Creating test_test_1 
Creating test_test2_1 

$ vi docker-compose.env2.yml # edit the file to change MY_VAR 

$ docker-compose -f docker-compose.env2.yml up -d 
Recreating test_test_1 
test_test2_1 is up-to-date 

バージョン3のファイル形式でdocker stack deploy -c docker-compose.ymlとしてコンテナを実行する場合、あなたはあなたのサービスの実行の複数のインスタンスを持っている場合は任意のダウンタイムを防ぐことができますサービスのローリング更新を行うことができます。この機能はまだ非常に新しく、1.13.1でいくつかの問題をアップデートで修正し、この新しいものと同様に、まだバグは解決されています。

+0

'.env'ファイルを削除し、新しい' docker-compose.prod.yml'ファイルを追加し、デフォルト設定を上書きしました: 'docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d' –

関連する問題