

# 对 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 
```

预设情况下，经 Amazon ECS 优化的 Amazon Linux AMI 从版本 `2015.09.d` 开始，然后后续版本中启动了 8-GiB 的卷，作为文件系统的根连接 `/dev/xvda` 并挂载。另外还有一个在 `/dev/xvdcz` 挂载并供 Docker 用于映像和元数据存储的 22 GiB 卷。如果该存储空间被填满，则 Docker 进程守护程序将无法创建新的容器。

向您的容器实例添加存储的最简单方式是终止现有实例，然后启动具有更大的数据存储卷的新实例。但如果您无法执行此操作，则可以向 Docker 使用的卷组添加存储，然后执行 [经 Amazon ECS 优化的 Linux AMI](ecs-optimized_AMI.md) 中的下述步骤来扩展其逻辑卷。

如果您的容器实例存储是填满速度过快，则可采取以下几个措施来减小影响：
+ 要查看精简轮询信息，请在容器实例上运行以下命令：

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