standard_init_linux.go: 178: Der Exec-Benutzerprozess hat einen "Exec-Formatfehler" verursacht.


78

Docker hat diesen Fehler ausgelöst:

standard_init_linux.go: 178: Der Exec-Benutzerprozess hat einen "Exec-Formatfehler" verursacht.

Immer wenn ich einen bestimmten Docker-Container mit CMD oder ENTRYPOINT ausführe, ohne Rücksicht auf Änderungen an der Datei, außer CMD oder ENTRYPOINT zu entfernen. Hier ist die Docker-Datei, mit der ich gearbeitet habe und die bis vor ungefähr einer Stunde perfekt funktioniert hat:

FROM buildpack-deps:jessie

ENV PATH /usr/local/bin:$PATH

ENV LANG C.UTF-8

RUN apt-get update && apt-get install -y --no-install-recommends \
        tcl \
        tk \
    && rm -rf /var/lib/apt/lists/*

ENV GPG_KEY 0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D
ENV PYTHON_VERSION 3.6.0

ENV PYTHON_PIP_VERSION 9.0.1

RUN set -ex \
    && buildDeps=' \
        tcl-dev \
        tk-dev \
    ' \
    && apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \
    \
    && wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \
    && wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \
    && export GNUPGHOME="$(mktemp -d)" \
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \
    && gpg --batch --verify python.tar.xz.asc python.tar.xz \
    && rm -r "$GNUPGHOME" python.tar.xz.asc \
    && mkdir -p /usr/src/python \
    && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
    && rm python.tar.xz \
    \
    && cd /usr/src/python \
    && ./configure \
        --enable-loadable-sqlite-extensions \
        --enable-shared \
    && make -j$(nproc) \
    && make install \
    && ldconfig \
    \
    && if [ ! -e /usr/local/bin/pip3 ]; then : \
        && wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \
        && python3 /tmp/get-pip.py "pip==$PYTHON_PIP_VERSION" \
        && rm /tmp/get-pip.py \
    ; fi \
    && pip3 install --no-cache-dir --upgrade --force-reinstall "pip==$PYTHON_PIP_VERSION" \
    && [ "$(pip list |tac|tac| awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \
    \
    && find /usr/local -depth \
        \( \
            \( -type d -a -name test -o -name tests \) \
            -o \
            \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
        \) -exec rm -rf '{}' + \
    && apt-get purge -y --auto-remove $buildDeps \
    && rm -rf /usr/src/python ~/.cache

RUN cd /usr/local/bin \
    && { [ -e easy_install ] || ln -s easy_install-* easy_install; } \
    && ln -s idle3 idle \
    && ln -s pydoc3 pydoc \
    && ln -s python3 python \
    && ln -s python3-config python-config

RUN pip install uwsgi

RUN mkdir /config

RUN mkdir /logs

ENV HOME /var/www

WORKDIR /config

ADD conf/requirements.txt /config

RUN pip install -r /config/requirements.txt

ADD conf/wsgi.py /config

ADD conf/wsgi.ini /config

ADD conf/__init__.py /config

ADD start.sh /bin/start.sh

RUN chmod +x /bin/start.sh

EXPOSE 8000

ENTRYPOINT ["start.sh", "uwsgi", "--ini", "wsgi.ini"]

Antworten:


186

Ich habe vergessen zu setzen

#!/bin/bash

Oben in der sh-Datei ist das Problem behoben.


3
Vielen Dank! Nach einer Stunde Haarziehen und zehnmaligem Überprüfen, ob die Architekturen (Arm / x64 usw.) übereinstimmen, hat Ihre Antwort den Tag gerettet!. ps: Für Windows-Benutzer wie mich, die ein Linux-Docker erstellen, vergessen Sie nicht, die Windows-Zeilenumbrüche (\ r) aus Ihrer Datei zu entfernen, da sonst die Fehler weiterhin auftreten!
— Maarten Kieft

Nachdem ich diese Lösung verwendet hatte, funktionierte sie. Früher hatte ich das gleiche Problem.
— Akshat Thakar

7
Ich hatte ein Leerzeichen vor meinem "#! / Bin / bash"
— ArunTejCh

2
FFS! Stunden und Stunden versuchen es herauszufinden und das war das Problem - bitte wählen Sie dies als Antwort !!!!
— Alessandro Mariani

Ich hatte das #am Anfang meines Einstiegspunktes irgendwie entfernt . Was für eine Zeitverschwendung.
— Shreddern

30

Fügen Sie diesen Code hinzu

   #!/usr/bin/env bash

oben in Ihrer Scirpt-Datei.


1
@akki Der Einstiegspunkt muss ausführbar sein. Wenn die ursprüngliche Shell-Datei nicht vorhanden war, verursachte dies den Fehler.
— jjmerelo

Schön, du rettest meinen Tag
— Kenny Lee

4

Dies kann passieren, wenn Sie versuchen, ein von x86 erstelltes Image auf einem arm64 / aarch64-Computer auszuführen.

Sie müssen das Image mithilfe der entsprechenden Architektur neu erstellen


1
Vielen Dank! Ich hatte kürzlich mein Docker-Zeug auf einem Himbeer-Pi nach Kubernetes verschoben - und dabei die unterschiedliche Architektur vergessen - musste alle meine Bilder ändern, um arm32v7 oder arm64v8 zu verwenden. Du hast mich in die richtige Richtung gelenkt!
— MichaelEaton

2

Ein weiterer möglicher Grund hierfür könnte sein, dass die Datei mit Windows-Zeilenenden (CRLF) gespeichert wird. Speichern Sie es mit Unix-Zeilenenden (LF) und die Datei wird gefunden.


1

Ich habe das gleiche Problem in RHEL 7.3, Docker 17.05-ce, beim Ausführen eines offline geladenen Images festgestellt. Es schien, dass der Standardspeichertreiber von RHEL / CentOS von Device-Mapper auf Overlay geändert wurde . Durch Zurücksetzen des Treibers auf Devicemapper wurde das Problem behoben.

dockerd --storage-driver=devicemapper

oder

/etc/docker/daemon.json
{
  "storage-driver": "devicemapper"
}

Dies war die einzige funktionierende Lösung für mich. Ich bevorzuge die Konfigurationslösung, da die andere einen neuen aktiven Prozess erzeugt und diesen möglicherweise nur vorübergehend behebt.
— ST-DDT

0

Erweiterung auf die akzeptierte Antwort:

Für ein alpines (ohne Bash) Bild:

#!/bin/ash

Löst das Problem oben in der sh-Datei.


0

Eine weitere Möglichkeit ist, dass #! / Bin / bash nicht in der ersten Zeile steht. Es darf wirklich nichts davor sein (keine leeren Zeilen, nichts).


0

Keine direkte Antwort auf die gestellte Frage. Obwohl ich den Fehler beim Aufrufen von "docker-compose up" erhalten habe, um meine nodejs-Anwendung aufzurufen. Erkannte, dass ich in meinem "Dockerfile" hatte CMD ["./server.js"].

Um CMD ["npm","start"]das Problem zu beheben, habe ich es durch ersetzt und das Problem wurde behoben. Ich hoffe, wenn jemand wegen dieser Ausnahme hier landet, kann dies hilfreich sein.


0

In meinem Fall habe ich meine ECS-Instanz "entleert" und sie wieder "aktiviert", und danach ist der Fehler verschwunden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.