概要


Dockerコンテナを起動する際,設定ファイル上で再起動ポリシーrestart:alwaysとした場合は手動で停止しない限りコンテナが停止すると常に再起動される1. これはホストマシンが再起動しても同様である. しかしコンテナ起動時にホストマシンの環境変数を読み込んでいた場合,コンテナの再起動時にその環境変数の値は引き継がれるのだろうか. 結論,起動時に設定された値はその後ホストマシンの再起動によってコンテナが自動再起動されても引き続き使用される. その確認をしたのが今回の記事である.

環境


  • Vagrant ( Ubuntu 18.04 LTS )

目的


Dockerコンテナ起動時にしていした環境変数の値は,その後ホストマシン(vagrant)が再起動したことによって自動再起動がかかると保持されるのかを確認する.

確認


docker-compose.ymlの用意

以下のようにdocker-compose.ymlを用意する.

# docker-compose.ymlの中身
testapp:
  image: ubuntu:latest
  restart: always
  environment:
    - HOGE=${HOGE}
  tty: true

コンテナの起動と環境変数の値の確認

vagrant@vagrant:~/testdir$ ls
docker-compose.yml
vagrant@vagrant:~/testdir$ cat docker-compose.yml
testapp:
  image: ubuntu:latest
  restart: always
  environment:
    - HOGE=${HOGE}
  tty: true
vagrant@vagrant:~/testdir$ export HOGE=hoge
vagrant@vagrant:~/testdir$ docker-compose up -d
Creating testdir_testapp_1 ...
Creating testdir_testapp_1 ... done
vagrant@vagrant:~/testdir$ docker-compose exec testapp bash
root@a9778e6cd6c3:/# echo $HOGE
hoge
root@a9778e6cd6c3:/#

上記のように,コンテナ起動前に環境変数HOGEに設定された値がコンテナ上でも設定されていることが確認できる.

ホストマシンの再起動

さて,この状態でホストマシン(vagrant)を再起動する.

# コンテナから抜ける
root@a9778e6cd6c3:/# exit
vagrant@vagrant:~/testdir$ logout
Connection to 127.0.0.1 closed.
# ホストマシンの停止
$ vagrant halt
==> default: Attempting graceful shutdown of VM...
# 起動
$ vagrant up
$ vagrant ssh
vagrant@vagrant:~$ cd testdir/
vagrant@vagrant:~/testdir$ docker-compose ps
WARNING: The HOGE variable is not set. Defaulting to a blank string.
      Name          Command   State   Ports
-------------------------------------------
testdir_testapp_1   bash      Up


vagrant@vagrant:~/testdir$ echo $HOGE

vagrant@vagrant:~/testdir$ docker-compose exec testapp bash
WARNING: The HOGE variable is not set. Defaulting to a blank string.
root@a9778e6cd6c3:/# echo $HOGE
fuga
root@a9778e6cd6c3:/#

上記の結果から,ホストマシンが再起動されたことによりコンテナが自動起動されても,設定された環境変数は保持され続けていることがわかる. 一方で,当たり前のことだがホストマシン側は環境変数は未設定となっている.

まとめ


今回はコンテナの再起動ポリシーにおける環境変数の値の保持について確認した.

参考