
Ubuntu ボックスで docker サービスを再起動すると、service docker restart
起動するとは思っていなかったいくつかのコンテナーが起動しました。
それはなぜですか? どの構成ファイル/ストレージ/その他に、どのイメージを起動するかに関する情報が保存されていますか?
でリストすると、たくさんの画像(約 50 枚)がありますdocker images
。しかし、 を起動すると、そのうち 8 枚しか起動しませんdockerd
。なぜでしょうか。どうすればこれを変更できますか。
ありがとう。
答え1
個々のコンテナには、適用できる再起動ポリシーがあります。これは、docker run --restart=...
コンテナの起動時、またはrestart: ...
Compose yml ファイルの行で設定されます。既存のコンテナの再起動ポリシーは、次のように変更できます。
$ docker update --restart=... ${container_name_or_id}
すべてのコンテナとその再起動ポリシーを一覧表示するには、bash から次のコマンドを実行します。
$ docker container ls -q | \
xargs docker container inspect --format \
'{{ .Name }}: {{.HostConfig.RestartPolicy.Name}}'
の再開ポリシー使用できるものは次のとおりです。
いいえ コンテナが終了したときに自動的に再起動しません。これがデフォルトです。
失敗時[:最大再試行回数] コンテナがゼロ以外の終了ステータスで終了した場合にのみ再起動します。オプションで、Docker デーモンが試行する再起動の再試行回数を制限します。
いつも 終了ステータスに関係なく、常にコンテナを再起動します。always を指定すると、Docker デーモンはコンテナの再起動を無期限に試行します。また、コンテナの現在の状態に関係なく、デーモンの起動時にコンテナが常に起動します。
停止しない限り 終了ステータスに関係なく、常にコンテナを再起動しますが、コンテナが以前に停止状態になっていた場合は、デーモンの起動時にコンテナを起動しないでください。
再起動ポリシー では、always
意図的にコンテナを停止した場合でも、表示されているように、docker デーモンが再起動した後に予期しないコンテナの再起動が発生します。このため、私は通常、unless-stopped
再起動ポリシーを使用してスタンドアロン コンテナを作成します。
docker swarm モードを使用している場合、ターゲットの状態が現在の状態と一致しないときはいつでも、サービスによって新しいコンテナが自動的に起動されます。ラップトップでよく見られる単一ノードの swarm クラスターの場合、これは、docker を再起動するとコンテナが再起動するだけでなく、実行中のコンテナを停止または削除した場合でもコンテナが再起動することを意味します。
サービスを永久に停止して削除します。
$ docker service ls # to show the running services
$ docker service rm ${service_id_or_name}
サービスがレプリケート モードで構成されており、サービスを削除せずに一時的に停止したい場合は、ターゲット レプリカを 0 に更新できます。
$ docker service update --replicas=0 ${service_id_or_name}
サービスはスタックの一部としてデプロイされる場合もあります。スタック全体を削除するには、次の手順を実行します。
$ docker stack ls # to show the defined stacks
$ docker stack rm ${stack_id_or_name}
答え2
これは、一部のコンテナで RestartPolicy が always に設定されていることを意味します。つまり、コンテナは常に起動している必要があります。問題のコンテナを調べ、特に RestartPolicy の値を確認してください。
$ docker inspect container-name
これは通常、コンテナがフラグ--restart
alwaysで作成された場合に発生します。
コンテナの自動起動を無効にするには、次のコマンドを使用します。
$ docker update --restart=no container-name
この問題を回避する別の方法は、コンテナを起動するときにRestartPolicyをunless-stoppedに設定することです。docker アップデート
答え3
などの docker 再起動ポリシーを調べてください--restart always
。一部のコンテナーがそれを使用していると思われます。docker のサービス起動スクリプトを確認してください。docker ps -a --no-trunc
完全なリストを表示するには、 を使用できます。
答え4
イメージは自動的に起動しませんが、コンテナは自動的に起動します。
service docker restart
コンテナには停止または開始フラグ付きは--restart always
再起動時に自動的に再開されます。 でこれらを確認してくださいdocker ps -a
。
コンテナを起動したくない場合は (フラグが付いているコンテナであっても)、コンテナを削除するか--restart always
、 を実行します。docker rm container
docker-compose down