Amazon ECS 中的泊塢視API error (500): devmapper窗疑難排解 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon ECS 中的泊塢視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 AMI 會使用作業系統的 8 GiB 磁碟區啟動,此作業系統連接於 /dev/xvda,而且掛載為檔案系統的根目錄。另有一個 22 GiB 的磁碟區連接在 /dev/xvdcz,Docker 用於儲存映像和中繼資料。如果這個儲存空間已滿,則 Docker 常駐程式無法建立新的容器。

要將儲存體新增到您的容器執行個體,最簡單方式是終止現有的執行個體,並啟動有較大資料儲存體磁碟區的新執行個體。不過,如果您無法執行此作業,您可以遵循 Amazon ECS 優化的 Linux AMI 中的程序,在 Docker 所用的磁碟區群組新增儲存,並擴展其邏輯磁碟區。

如果您的容器執行個體儲存體太快填滿,您可以採取幾個動作降低此效果:

  • 若要檢視精簡輪詢資訊,請在您的容器執行個體上執行下列命令:

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