79
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-08-28

目的

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

参考記事

79
62
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?