CannotCreateContainerError: API error (500): devmapper - Amazon Elastic Container Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

CannotCreateContainerError: API error (500): devmapper

O seguinte erro do Docker indica que o armazenamento de grupos thin em sua instância de contêiner está cheio e que o daemon do Docker não pode criar novos contêineres:

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

Por padrão. as AMIs do Amazon Linux otimizadas para o Amazon ECS da versão 2015.09.d e posterior são iniciadas com um volume de 8 GiB para o sistema operacional anexado a /dev/xvda e montado como a raiz do sistema de arquivos. Há um volume de 22 GiB adicionais anexado a /dev/xvdcz que o Docker usa em armazenamento de imagens e metadados. Caso o espaço de armazenamento esteja cheio, o daemon do Docker não pode criar novos contêineres.

A maneira mais fácil de adicionar armazenamento às instâncias de contêiner é encerrar as instâncias existentes e executar novas com volumes de armazenamento físico de dados maiores. Porém, se você não puder fazer isso, poderá adicionar armazenamento ao grupo de volumes que o Docker usa e estender o volume lógico seguindo os procedimentos em AMIs otimizadas para Amazon ECS.

Caso o armazenamento de instância de contêiner esteja enchendo muito rapidamente, existem algumas ações que você pode tomar para reduzir esse efeito:

  • Para visualizar as informações de pesquisas detalhadas, execute o seguinte comando na instância de contêiner:

    docker info
  • (Agente de contêineres do Amazon ECS 1.8.0 e versões posteriores) Você pode reduzir o tempo que os contêineres parados ou saídos permanecem em suas instâncias de contêiner. A variável de configuração do agente ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION define a duração da espera desde quando uma tarefa é parada até o contêiner do Docker ser removido (por padrão, esse valor é de 3 horas). Isso remove os dados de contêiner do Docker. Se esse valor for definido como muito baixo, talvez você não consiga inspecionar seus contêineres parados ou visualizar os registros antes de serem removidos. Para ter mais informações, consulte Configuração do agente de contêiner do Amazon ECS.

  • Você pode remover contêineres não executados e imagens não utilizadas de suas instâncias de contêiner. É possível usar os comandos de exemplo a seguir para remover manualmente os contêineres parados e as imagens inutilizadas. Os contêineres excluídos não podem ser inspecionados posteriormente e as imagens excluídas devem ser extraídas novamente antes que novos contêineres sejam iniciados a partir delas.

    Para remover contêineres que não estejam em execução, execute o seguinte comando na instância de contêiner:

    docker rm $(docker ps -aq)

    Para remover imagens não utilizadas, execute o seguinte comando na instância de contêiner:

    docker rmi $(docker images -q)
  • Você pode remover blocos de dados não utilizados nos contêineres. É possível usar o comando a seguir para executar fstrim em qualquer contêiner em execução e descartar todos os blocos de dados inutilizados pelo sistema de arquivos do contêiner.

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