View a markdown version of this page

Risolvi i problemi relativi a API error (500): devmapper di Docker in Amazon ECS - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risolvi i problemi relativi a API error (500): devmapper di Docker in Amazon ECS

Il seguente errore Docker indica che lo spazio di storage del thin pool della tua istanza di container è pieno e che il daemon Docker non può creare nuovi container:

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

Per impostazione predefinita, le AMI ECS-optimized Amazon Amazon Linux a partire dalla versione precedente 2015.09.d vengono avviate con un volume da 8 GiB per il sistema operativo collegato /dev/xvda e montato come radice del file system. È previsto un volume aggiuntivo di 22 GiB collegato a /dev/xvdcz che Docker utilizza per l'archiviazione di immagini e metadati. Se questo spazio di storage è pieno, il daemon Docker non può creare nuovi container.

Il modo più semplice per aggiungere storage alle istanze di container è quello di terminare le istanze esistenti e avviarne di nuove con volumi di storage dei dati superiori. Tuttavia, se non riesci a completare questa operazione, puoi aggiungere archiviazione al gruppo di volumi utilizzati da Docker ed estendere il relativo volume logico seguendo le procedure riportate in AMI Amazon ECS-optimized Linux.

Se lo storage dell'istanza di container si sta riempiendo troppo rapidamente, puoi eseguire alcune operazioni per ridurre questo effetto:

  • Per visualizzare le informazioni di thin poll, esegui il comando seguente nella tua istanza di container:

    docker info
  • (Agente del container di Amazon ECS 1.8.0 e versioni successive) Puoi ridurre la quantità di tempo in cui i container arrestati o terminati rimangono nelle istanze di container. La variabile di configurazione dell'agente ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION imposta il tempo di attesa dall'interruzione di un'attività fino alla rimozione del container Docker (di default, questo valore è 3 ore). Questo rimuove i dati del container di Docker. Se il valore è troppo basso, potresti non riuscire a esaminare i container interrotti o visualizzare i log prima che vengano rimossi. Per ulteriori informazioni, consulta Configurazione dell'agente del container Amazon ECS.

  • Puoi rimuovere i container non in esecuzione e le immagini inutilizzate dalle istanze di container. Puoi utilizzare i seguenti comandi di esempio per rimuovere manualmente i container interrotti e le immagini inutilizzate. I container eliminati non possono essere esaminati in un secondo momento e le immagini eliminate devono essere recuperate nuovamente prima di poter avviare i nuovi container da esse.

    Per rimuovere i container non in esecuzione, esegui il comando riportato nell'istanza di container:

    docker rm $(docker ps -aq)

    Per rimuovere le immagini inutilizzate, emetti il comando seguente nell'istanza di container:

    docker rmi $(docker images -q)
  • Puoi rimuovere i blocchi di dati inutilizzati all'interno dei container. Puoi utilizzare il seguente comando per eseguire fstrim in qualsiasi container in esecuzione e ignorare tutti i blocchi di dati inutilizzati dal file system del container.

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