Ich möchte den Fehler „exec format“ beheben, der dazu führt, dass meine Amazon Elastic Container Service (Amazon ECS)-Aufgaben fehlschlagen.
Kurzbeschreibung
Dieser Fehler tritt auf, wenn für ein Container-Image ausgeführte Aufgaben für eine andere Architektur für die Amazon Elastic Compute Cloud (Amazon EC2)-Instances erstellt wurden. Zum Beispiel, wenn du ein Container-Image auf einer ARM-basierten Instance erstellt hast und dann versuchst, die Aufgabe auf einer x86-Instance auszuführen.
Hinweis: Die Aufgabe hat den Grund für den Stopp "Essential container in task exited" und den Exit-Code 1.
Lösung
Um dieses Problem zu lösen, ändere entweder die Architektur der Amazon ECS-Aufgaben oder erstelle das Image für die richtige Architektur neu.
Die Architektur der ECS-Aufgaben ändern
Die Architektur einer Aufgabe wird durch den Parameter cpuArchitecture in der Aufgabendefinition bestimmt. Gültige Werte sind x86_64 und ARM64 mit x86_64 als Standardwert.
Um die Architektur zu ändern, die zum Starten von Aufgaben verwendet wird, erstelle eine neue Revision der Aufgabendefinition, wobei der cpuArchitecture-Parameter auf den gewünschten Wert gesetzt ist. Wenn die Aufgaben Teil eines Services sind, verwende die überarbeitete Architektur, um den Service zu aktualisieren und führe eine Bereitstellung durch, um neue Aufgaben zu starten.
Für Fargate-Starttypen stellt AWS automatisch die Infrastruktur mit der richtigen Architektur bereit, um die Aufgabe auszuführen. Wenn du EC2-Instances oder externe Instances als Starttyp verwendest, musst du die Kapazität für die Konfiguration verwalten. Weitere Informationen findest du unter Kapazitätsmanagement.
Das Image für die richtige Architektur neu erstellen
Verwende dieselbe Architektur, die in der Aufgabendefinition angegeben ist, um das Container-Image neu zu erstellen.
Hinweis: Die meisten Tools zum Erstellen von Container-Images verwenden standardmäßig die Architektur des Host-Computers.
Docker oder Finch verwenden
Füge dem Befehl „build“ --platform parameter hinzu, um die Zielarchitektur festzulegen. Zum Beispiel erstellt der Docker build --platform linux/arm64\ [...] ein Image für ARM64. Die Finch build**--plaform linux/amd64\ [...]** erstellt ein Image für die x86/64-Architektur.
Beispiel für einen „build“-Befehl:
docker build -t my-image --platform linux/arm64
Weitere Informationen zum Befehlszeilen-Client Finch findest du unter Einführung in Finch: Ein Open-Source-Client für die Container-Entwicklung.
Weitere Informationen zum Erstellen von Docker-Images findest du unter Erstellen von plattformübergreifenden Images auf der Docker-Website.
AWS CDK
Verwende das Image ecs.ContainerImage.fromAsset in AWS Cloud Development Kit (AWS CDK), um ein Image aus einer Docker-Datei im Quellverzeichnis zu erstellen und hochzuladen. Weitere Informationen findest du unter Images.
CodeBuild
Du kannst AWS CodeBuild auch mit Docker-Images verwenden, um die Architektur zu konfigurieren. Weitere Informationen findest du unter Berechnungsmodi und -typen der Build-Umgebung.