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"]
Marcus Ruddick
quelle

Antworten:

186

Ich habe vergessen zu setzen

#!/bin/bash

Oben in der sh-Datei ist das Problem behoben.

Marcus Ruddick
quelle
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.

rainstop3
quelle
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

Alex Joseph
quelle
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.

Ryan Allen
quelle
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"
}
Omid
quelle
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.

pme
quelle
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).

Piotr Kepka
quelle
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.

Vijay Yadav
quelle
0

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

Sudharsan S.
quelle