Fehlerbehebung beim Docker API error (500): devmapper in Amazon ECS - Amazon Elastic Container Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Fehlerbehebung beim Docker API error (500): devmapper in Amazon ECS

Der folgende Docker-Fehler gibt an, dass der Thin-Pool-Speicher für Ihre Container-Instance vollständig belegt ist und der Docker-Daemon keine neuen Container erstellen kann:

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-optimierte Amazon Linux AMIs ab Version 2015.09.d werden standardmäßig mit einem 8-GiB-Volume für das Betriebssystem gestartet, das unter /dev/xvda angefügt und als Stamm des Dateisystems gemountet ist. Es gibt ein zusätzliches 22-GiB-Volume, das unter /dev/xvdcz angefügt ist und das von Docker zum Speichern von Images und Metadaten verwendet wird. Wenn dieser Speicherplatz voll ist, kann der Docker-Daemon keine neuen Container mehr erstellen.

Der einfachste Weg, Speicher zu Container-Instances hinzuzufügen, besteht darin, die bestehenden Instances zu beenden und neue mit größeren Datenspeichervolumen zu starten. Wenn Sie das allerdings nicht tun können, können Sie Speicher zu der Volume-Gruppe hinzufügen, die Docker verwendet, und sein logisches Volume mithilfe der Verfahren in Amazon ECS-optimierte Linux-AMIs erweitern.

Wenn sich der Speicher Ihrer Container-Instance zu schnell füllt, können Sie einige Maßnahmen ergreifen, um diesen Effekt zu reduzieren:

  • Führen Sie den folgenden Befehl für Ihre Container-Instance aus, um die Thin Poll-Informationen anzuzeigen:

    docker info
  • (Amazon ECS Container Agent 1.8.0 und höher) Sie können die Zeit reduzieren, für die gestoppte oder verlassene Container auf Ihren Container-Instances verbleiben. Die Variable zur Agentenkonfiguration ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION stellt die Zeitdauer ein, die gewartet wird, von dem Zeitpunkt, zu dem eine Aufgabe gestoppt wird, bis zu dem Zeitpunkt, zu dem der Docker-Container entfernt wird (standardmäßig beträgt dieser Wert 3 Stunden). Dadurch werden die Daten des Docker-Containers entfernt. Wenn dieser Wert zu niedrig eingestellt ist, können Sie Ihre gestoppten Container möglicherweise nicht überprüfen oder die Protokolle nicht einsehen, bevor sie entfernt werden. Weitere Informationen finden Sie unter Konfiguration des Amazon-ECS-Container-Agenten.

  • Sie können nicht laufende Container und unbenutzte Images aus Ihren Container-Instances entfernen. Sie können mithilfe der folgenden Beispielbefehle gestoppte Container und nicht verwendete Images manuell löschen. Gelöschte Container können später nicht geprüft werden und gelöschte Images müssen noch mal abgerufen werden, bevor neue Container von ihnen gestartet werden können.

    Um nicht ausgeführte Container zu entfernen, führen Sie den folgenden Befehl auf Ihrer Container-Instance aus:

    docker rm $(docker ps -aq)

    Um nicht verwendete Images zu entfernen, führen Sie den folgenden Befehl auf Ihrer Container-Instance aus:

    docker rmi $(docker images -q)
  • Sie können ungenutzte Datenblöcke innerhalb von Containern entfernen. Mithilfe des folgenden Befehls können Sie fstrim auf jedem laufenden Container ausführen und alle Datenblöcke verwerfen, die von dem Container-Dateisystem nicht verwendet werden.

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