Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

参考記事

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした