

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

# 在 Amazon ECS 中對 Docker `API error (500): devmapper` 進行疑難排解
<a name="CannotCreateContainerError"></a>

以下 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](ecs-optimized_AMI.md) 中的程序，在 Docker 所用的磁碟區群組新增儲存，並擴展其邏輯磁碟區。

如果您的容器執行個體儲存體太快填滿，您可以採取幾個動作降低此效果：
+ 若要檢視精簡輪詢資訊，請在您的容器執行個體上執行下列命令：

  ```
  docker info
  ```
+ (Amazon ECS 容器代理程式 1.8.0 版和更新版本) 您可以縮短已停止或結束的容器保留在您容器執行個體中的時間。`ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION` 代理組態變數會將時間設為從任務停止等到 Docker 容器移除 (此值預設為 3 小時)。這會移除 Docker 容器的資料。如果此值設定得太低，您可能無法檢查已停止的容器，或無法在容器移除之前檢視日誌。如需詳細資訊，請參閱[Amazon ECS 容器代理程式組態](ecs-agent-config.md)。
+ 您可以從容器執行個體移除非執行中的容器與閒置的映像。您可以使用以下範例命令，手動移除已停止的容器和未使用的映像。容器在刪除之後即無法檢查，而已刪除的映像必須得再次提取，才能從中啟動新的容器。

  若要移除非執行中的容器，請在您的容器執行個體上執行以下命令：

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