Swarm タスクの状態

Docker ではサービスの生成を行いますが、そこではタスクが起動されます。 サービスは期待される状態が記述されたものであり、タスクがそれを実行します。 Swarm ノードにおいては以下の順に動作がスケジュールされます。

  1. docker service createを使ってサービスを生成します。
  2. 上の要求が Docker マネージャーノードに届きます。
  3. Docker マネージャーノードは、特定ノード上にて実行するサービスをスケジューリングします。
  4. 各サービスは複数のタスクを起動します。
  5. 各タスクにはライフサイクルがあり、NEWPENDINGCOMPLETEといった状態があります。

タスクとは、一度実行されてから完了するまでの実行単位のことです。 タスクが停止すると、再度実行されることはありません。 別の新たなタスクにとって代わるかもしれません。

タスクは完了か失敗という結果に至るまでに、数種類の状態を経ていきます。 タスクはNEWという初期化状態から始まります。 タスクが数種類の状態を経るのは、常に次の状態へ向けて前進していくものであって、状態が戻るようなことはありません。 たとえばタスクがCOMPLETEからRUNNINGになることはありません。

タスクは以下に示す順に、状態を変化させていきます。

タスクの状態 日本語訳 内容説明
NEW 初期化 タスクが初期化されました。
PENDING 保留 タスクに対するリソースが割り当てられました。
ASSIGNED 割当済 Docker がタスクをノードに割り当てました。
ACCEPTED 受付済 タスクがワーカーノードによって受けつけられました。
ワーカーノードがタスクを拒否すると、状態はREJECTEDに変わります。
PREPARING 準備中 Docker がタスクを準備しています。
STARTING 起動中 Docker がタスクを起動しています。
RUNNING 実行中 タスクが実行中です。
COMPLETE 完了 タスクがエラーコードなしに終了しました。
FAILED 失敗 タスクがエラーコードをともなって終了しました。
SHUTDOWN 停止 Docker がタスクに対してシャットダウンを要求しました。
REJECTED 拒否 ワーカーノードがタスクを拒否しました。
ORPHANED 孤立 ノードが長期間停止しています。
REMOVE 削除 タスクは終了していないが、関連サービスは削除またはスケールダウンしている。

タスク状態の確認

docker service ps <サービス名>を実行して、タスク状態を確認することができます。 CURRENT STATE(現在の状態)カラムは、そのタスクの状態およびどれだけ存在しているかを示しています。

$ docker service ps webserver
ID             NAME              IMAGE    NODE        DESIRED STATE  CURRENT STATE            ERROR                              PORTS
owsz0yp6z375   webserver.1       nginx    UbuntuVM    Running        Running 44 seconds ago
j91iahr8s74p    \_ webserver.1   nginx    UbuntuVM    Shutdown       Failed 50 seconds ago    "No such container: webserver.…"
7dyaszg13mw2    \_ webserver.1   nginx    UbuntuVM    Shutdown       Failed 5 hours ago       "No such container: webserver.…"

次に読むものは

swarm, task, service