Amazon ECS の Docker API error (500): devmapper のトラブルシューティング - Amazon Elastic Container Service

Amazon ECS の Docker API error (500): devmapper のトラブルシューティング

以下の Docker エラーは、コンテナインスタンスのシンプールストレージがいっぱいで、Docker デーモンが新しいコンテナを作成できないことを示しています。

CannotCreateContainerError: API error (500): devmapper: Thin Pool has 4350 free data blocks which is less than minimum required 4454 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

デフォルトでは、バージョン 2015.09.d以降の Amazon ECS 最適化 Amazon Linux AMIs は、/dev/xvdaに添付されファイルシステムのルートとしてマウントされたオペレーティングシステム用の8 GiB ボリュームで起動します。また、Docker がイメージとメタデータの保存に使用する /dev/xvdczに添付された22 GiB のボリュームが追加されています。このストレージ領域がいっぱいになると、Docker デーモンは新しいコンテナを作成できません。

コンテナインスタンスにストレージを追加する最も簡単な方法は、既存のインスタンスを終了し、サイズを増加したデータストレージボリュームで新しいインスタンスを起動することです。ただし、この方法を実行できない場合は、「Amazon ECS に最適化された Linux AMI」の手順に従って、Docker が使用するボリュームグループにストレージを追加し、その論理ボリュームを拡張できます。

コンテナインスタンスストレージがあまりにも速くいっぱいになる場合は、以下のいくつかの対処方法があります。

  • thin poll情報を表示するには、コンテナインスタンスで次のコマンドを実行します。

    docker info
  • (Amazon ECS コンテナエージェント 1.8.0 以降) 停止または終了したコンテナがコンテナインスタンスに残る時間を短縮できます。ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION エージェント設定変数で、タスクが停止されてから Docker コンテナが削除されるまでの時間を設定します (デフォルトでは、この値は 3 時間です)。これにより Docker コンテナのデータは削除されます。この値が低すぎると、ログを削除するまでは停止したコンテナを検査したり、ログを表示したりすることができない場合があります。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

  • 実行されていないコンテナと未使用のイメージをコンテナインスタンスから削除できます。次のコマンドの例を使用して、停止したコンテナと未使用のイメージを手動で削除することができます。削除されたコンテナを後から検査することはできませんので、削除されたイメージは、新しいコンテナをスタートする前に、再度プルする必要があります。

    実行中ではないコンテナを削除するには、コンテナインスタンスで以下のコマンドを実行します。

    docker rm $(docker ps -aq)

    使用しないイメージを削除するには、コンテナインスタンスで以下のコマンドを実行します。

    docker rmi $(docker images -q)
  • コンテナ内で使用されていないデータブロックは削除できます。以下のコマンドを使用して、実行中のコンテナで fstrim を実行し、コンテナファイルシステムによって使用されていないデータブロックを破棄できます。

    sudo sh -c "docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/"