Dockerコンテナが常に実行されるのを保護する方法は?

Dockerコンテナが常に実行されるのを保護する方法は?

複数の開発者のラップトップで実行されるHBase Dockerコンテナがあります。開発者がノートブックを閉じると、Dockerコンテナは必然的に終了し、実行が停止します。

これがコンテナを呼び出す方法です。

$ docker run -d --hostname hbase-db --name hbase \
     -p 2181:2181   -p 8080:8080   -p 8085:8085   -p 9090:9090 -p 9095:9095 \
     -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 \
     harisekhon/hbase

質問

このコンテナが死ぬと自動的に再起動するのをどのように保護できますか?

答え1

Docker再起動戦略

Dockerはこの問題を解決するために次の機能を提供します。Docker再起動戦略:

ドッカーが提供するポリシーの再起動コンテナの終了時またはDockerの再起動時にコンテナが自動的に起動するかどうかを制御します。再起動ポリシーは、リンクされたコンテナが正しい順序で起動されることを保証します。 Dockerは、再起動戦略を使用し、プロセスマネージャを使用してコンテナを起動しないことをお勧めします。

再起動戦略の種類:

no                  Do not automatically restart the container. (the default)

on-failure          Restart the container if it exits due to an error, which
                    manifests as a non-zero exit code.

unless-stopped      Restart the container unless it is explicitly stopped or 
                    Docker itself is stopped or restarted.

always              Always restart the container if it stops.

使用法

その後、次のように再起動戦略を使用できます。

$ docker run -dit --restart always redis

ガイドライン

  • 再起動ポリシーは、コンテナが正常に起動した後にのみ適用されます。この場合、成功した起動は、コンテナが少なくとも10秒間起動され、Dockerがそれを監視し始めたことを意味します。これにより、まったく起動しないコンテナが再起動ループに入るのを防ぎます。

  • コンテナを手動で停止すると、Dockerデーモンが再起動されるか、コンテナが手動で再起動されるまで、その再起動ポリシーは無視されます。これは再起動ループを防ぐための別の試みです。

  • 再起動ポリシーはコンテナにのみ適用されます。 Swarm サービスの再起動ポリシー構成が異なります。サービスの再起動に関連するフラグを表示します。

はい

ここでは使用しますHello World ドッカーコンテナこれがどのように機能するかを説明するために。

まず、下に引きます。

$ docker pull hello-world
Using default tag: latest
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for docker.io/hello-world:latest
$ 

コンテナをダウンロードして実行してみましょう。

$ docker run -dit --restart always hello-world
0f6a61dddd3b667727a20df2c198941b2202653a71b6c86b8ace7b236bafc974

いくつかを実行すると、再起動docker psが続くことがわかります。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                              PORTS               NAMES
0f6a61dddd3b        hello-world         "/hello"            27 seconds ago      Up Less than a second                                   upbeat_brown

...time passes...

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                              PORTS               NAMES
0f6a61dddd3b        hello-world         "/hello"            5 minutes ago       Restarting (0) About a minute ago                       upbeat_brown

...time passes...
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
0f6a61dddd3b        hello-world         "/hello"            10 minutes ago      Restarting (0) 3 minutes ago                       upbeat_brown

Dockerログを見ると、何度も再起動されたことを確認できます。

$ docker logs 0f6a61dddd3b -f | grep "Hello from Docker"
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!

完了したら、コンテナが永久に再起動しないようにコンテナを停止する必要があります。

$ docker stop 0f6
0f6

あなたの修正

問題を解決するには、次のようにHBase Dockerコンテナを実行します。

$ docker run -d --hostname hbase-db --name hbase --restart always \
    -p 2181:2181   -p 8080:8080   -p 8085:8085   -p 9090:9090   -p 9095:9095 \
    -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 \
    harisekhon/hbase

引用する

関連情報