Risolvi i problemi relativi al Docker in Amazon API error (500): devmapper 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 al Docker in Amazon API error (500): devmapper 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, Amazon Linux è stato ECS ottimizzato per Amazon nella versione iniziale 2015.09.d e successiva con un volume AMIs 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 Linux ECS ottimizzato per Amazon AMIs.

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
  • (Amazon ECS Container Agent 1.8.0 e versioni successive) Puoi ridurre la quantità di tempo in cui i container fermi o usciti rimangono sulle tue 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 questo valore è impostato su un valore troppo basso, potresti non essere in grado di ispezionare i contenitori fermi o visualizzare i log prima che vengano rimossi. Per ulteriori informazioni, consulta Configurazione di Amazon ECS Container Agent.

  • Puoi rimuovere i contenitori non in esecuzione e le immagini non utilizzate dalle istanze dei contenitori. 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 non utilizzati all'interno dei contenitori. 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/"