複数の開発者のラップトップで実行される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