Docker

docker run --restart=alwaysがどれくらいrestartしてくれるか調べた

More than 1 year has passed since last update.


目的

この記事では、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


参考記事