目的
この記事では、docker run --restart=alwaysをつけて起動したコンテナは、dockerデーモンの再起動や、マシンの再起動をしたときに、どうなるのかを調べました。
2016-09-02
1.12.1 に関しても調べ始めました。
--restart=always
をコンテナを起動した後にも、せっていできることがわかりました。
結論
--restart=alwaysをつけて起動すると、
- dockerデーモンの再起動
- マシンの再起動
どちらでも、コンテナが再起動してくれました。
環境
docker-machineを使って用意しました
docker-machine create -d virtualbox local
ソフトウェア | version |
---|---|
docker | 1.8.1 |
docker-machine | 0.4.0 (9d0dc7a) |
1.12.1
docker-machine create --virtualbox-boot2docker-url "https://github.com/boot2docker/boot2docker/releases/download/v1.12.1/boot2docker.iso" -d virtualbox docker1.12.1
ソフトウェア | version |
---|---|
docker | 1.12.1 |
docker-machine | 0.5.6, build 61388e9 |
動機とか、docker run --restart=always について
最初にこのオプションを知ったのは、docker private registry をたてようと思って以下の記事を読んだときです。
その後、調べたら以下の記事があったので、いろいろ勉強になりました。
もともと常に起動していてほしいコンテナ(private registry, squid, gitbucket,,,)がいくつかあり、systemdとかにするかなとか考えていたのですが、どうもこのオプションでやりたいことができそうでした。
検証
--restart=alwaysをつけて起動してみる。
まずは起動してみます
docker@local:~$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
1bb83bafc038a138e3f60e77433886c8b82f98c1d4ad0e8fb71bbc26071e7b58
オプションを確認してみる。
docker@local:~$ docker inspect registry
必要なところだけ抜粋すると次のような感じになっています。
"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
},
--restart=alwasys
をつけないで、別のコンテナを起動してみたら次のような感じになりました。
起動
docker run -d -p 80:80 --name nginx nginx:latest
RestartPolicy
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
RestartPolicyのName のところが、変わっていることがわかると思います。
1.12.1
1.12.1でも同じ。
dockerデーモンの再起動
現状確認
実際にはstopしてstartしますが、そのまえに、今の状況を確認しておきます。
docker@local:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a6e723d792a registry:2 "/bin/registry /etc/d" 6 minutes ago Up 6 minutes 0.0.0.0:15000->5000/tcp registry_no_restart
1bb83bafc038 registry:2 "/bin/registry /etc/d" 8 minutes ago Up 8 minutes 0.0.0.0:5000->5000/tcp registry
コンテナが2つ動いています。
dockerデーモンを停止させる
docker デーモンを止めます。
docker@local:~$ sudo /etc/init.d/docker stop
dockerの状況を確認します
docker@local:~$ docker ps
Get http:///var/run/docker.sock/v1.20/containers/json: dial unix /var/run/docker.sock: no such file or directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?
止まっているのでコンテナなどはみえません。
1.12.1
1.12.1 でも同じ
dockerデーモンを起動する
dockerデーモンを起動します。
docker@local:~$ sudo /etc/init.d/docker start
Need TLS certs for local,127.0.0.1,10.0.2.15,192.168.99.104
-------------------
状況を確認します
docker@local:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bb83bafc038 registry:2 "/bin/registry /etc/d" 11 minutes ago Up 3 seconds 0.0.0.0:5000->5000/tcp registry
たしかに立ち上がっています
1.12.1
1.12.1でも同じ
マシンを再起動してみる
再起動してみました。
docker@local:~$ uptime
07:24:03 up 0 min, 2 users, load average: 5.93, 1.58, 0.53
状況を確認してみます。
docker@local:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bb83bafc038 registry:2 "/bin/registry /etc/d" 14 minutes ago Up 15 seconds 0.0.0.0:5000->5000/tcp registry
たしかに動いています。
1.12.1
1.12.1 でも同じでした
その他
このオプションは起動中に変更できるのか調べてみましたが、docker 1.8.1 の時点ではできないようです。
1.12.1
1.12.1 では docker update で設定の変更ができるようです。
いつからはいったかは調査してみないとわかりません。
起動
--restart=alwaysはなし
docker run -d -p 80:80 --name nginx nginx:latest
更新
docker update --restart=always nginx
確認
"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
},
再度はずしてみる
docker update --restart=no nginx
確認
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
適当なオプションをつけてみる
エラーになる
$ docker update --restart=nooo nginx
invalid restart policy nooo