1. ホーム
  2. docker

[解決済み] docker-compose コンテナで環境変数を最小限のダウンタイムで再ロードするには?

2023-04-19 08:15:21

質問

docker-compose.yml

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:

を変更すると .env ファイルを変更した場合、最小限のダウンタイムで新しい環境変数を使用するためにコンテナを再ロードするにはどうしたらよいでしょうか?

どのように解決するのですか?

docker-composeでymlを実行している場合は、単に 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

コンテナを実行する場合は docker stack deploy -c docker-compose.yml として実行すると、サービスのローリングアップデートを行うことができ、サービスの複数のインスタンスが動作している場合でもダウンタイムを防ぐことができます。この機能はまだ非常に新しく、更新に関する問題のいくつかを修正するために 1.13.1 が必要です。