私は領事のヘルスチェック機能を使用していますが、これらの「デッド」コンテナを取得し続けています。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20fd397ba638 progrium/consul:latest "\"/bin/bash -c 'cur 15 minutes ago Dead
正確には「デッド」コンテナとは何ですか?停止したコンテナはいつ「デッド」になりますか?
記録のために、progrium/consul + gliderlabs/registerrator images + SERVICE_XXXX_CHECKenv変数を実行してヘルスチェックを実行します。 docker run --rm my/img healthcheck.sh
のようにX秒ごとに画像を実行するヘルスチェックスクリプトを実行します
私は一般的に「死んだ」とはどういう意味か、そしてそれが起こらないようにする方法に興味があります。もう一つの独特なことは、私の死んだコンテナには名前がないということです。
これは、コンテナ検査からの情報です。
"State": {
"Dead": true,
"Error": "",
"ExitCode": 1,
"FinishedAt": "2015-05-30T19:00:01.814291614Z",
"OOMKilled": false,
"Paused": false,
"Pid": 0,
"Restarting": false,
"Running": false,
"StartedAt": "2015-05-30T18:59:51.739464262Z"
},
奇妙なことに、たまにしかコンテナが死んで、取り外されないのです。
ありがとうございました
編集:ログを見て、コンテナの停止が失敗する原因を見つけました:
Handler for DELETE /containers/{name:.*} returned error: Cannot destroy container 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc:
Driver aufs failed to remove root filesystem 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc:
rename /var/lib/docker/aufs/diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc
/var/lib/docker/aufs/ diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc-removing:
device or resource busy
なぜこれが起こるのですか?
edit2:これが見つかりました: https://github.com/docker/docker/issues/9665
2016年3月の更新: issue 9665 は PR 21107 (docker 1.11の場合)によってクローズされました
これは、「ドライバーaufsがルートファイルシステムの削除に失敗しました」、「デバイスまたはリソースがビジー」の問題を回避するのに役立つはずです。
元の回答2015年5月
コンテナの状態 の場合、デッドは1つです。これは、 Container.Start()
によってテストされます。
_if container.removalInProgress || container.Dead {
return fmt.Errorf("Container is marked for removal and cannot be started.")
}
_
コンテナが再起動しないようにするために、 停止に失敗するとDeadを設定 です。
考えられる失敗の原因の中で、 container.Kill()
を参照してください。
これは、_kill -15
_と_kill -9
_の両方が失敗していることを意味します。
_// 1. Send a SIGTERM
if err := container.killPossiblyDeadProcess(15); err != nil {
logrus.Infof("Failed to send SIGTERM to the process, force killing")
if err := container.killPossiblyDeadProcess(9); err != nil {
_
これは通常、OPが言及しているように、ビジーなデバイスまたはリソースがプロセスの強制終了を妨げることを意味します。
特にEBUSY
が使用されている場合、devicemapper
によって引き起こされるバグがたくさんあります。
EBUSY
関連のすべての問題にトラッカーのバグがあります。 https://github.com/docker/docker/issues/5684#issuecomment-69052334 を参照してください