1. manabuishiirb

    Posted

    manabuishiirb
Changes in title
+docker run --restart=alwaysがどれくらいrestartしてくれるか調べた
Changes in tags
Changes in body
Source | HTML | Preview

目的

この記事では、docker run --restart=alwaysをつけて起動したコンテナは、dockerデーモンの再起動や、マシンの再起動をしたときに、どうなるのかを調べました。

結論

--restart=alwaysをつけて起動すると、

  • dockerデーモンの再起動
  • マシンの再起動

どちらでも、コンテナが再起動してくれました。

環境

docker-machineを使って用意しました

docker-machine create -d virtualbox local

ソフトウェア version
docker 1.8.1
docker-machine 0.4.0 (9d0dc7a)

動機とか、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 regi
stry:2
1bb83bafc038a138e3f60e77433886c8b82f98c1d4ad0e8fb71bbc26071e7b58

オプションを確認してみる。

docker@local:~$ docker inspect registry

必要なところだけ抜粋すると次のような感じになっています。

"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
},

--restart=alwasys

をつけないで、別のコンテナを起動してみたら次のような感じになりました。

        "RestartPolicy": {
            "Name": "no",
            "MaximumRetryCount": 0
        },

RestartPolicyのName のところが、変わっていることがわかると思います。

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?

止まっているのでコンテナなどはみえません。

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
```
たしかに立ち上がっています

マシンを再起動してみる

再起動してみました。

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

たしかに動いています。

その他

このオプションは起動中に変更できるのか調べてみましたが、docker 1.8.1 の時点ではできないようです。

参考記事