Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

CannotCreateContainerError: 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-optimized Amazon Linux AMI では、起動時に、オペレーティングシステム用に 8 GiB ボリュームが /dev/xvda にアタッチされ、ファイルシステムのルートとしてマウントされます。また、Docker によるイメージとメタデータの保存用に 22 GiB のボリュームが /dev/xvdcz に追加でアタッチされます。このストレージ領域がいっぱいになると、Docker デーモンは新しいコンテナを作成できません。

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

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

  • (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/"