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

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

di default, le AMI Amazon Linux ottimizzate per Amazon ECS dalla versione 2015.09.d e successiva vengono avviate con un volume di 8 GiB per il sistema operativo collegato a /dev/xvda e sono montate come root 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 Linux ottimizzate per Amazon ECS.

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