302 votes

standard_init_linux.go: 178: le processus utilisateur exec a provoqué une "erreur de format exec"

docker a commencé à jeter cette erreur:

standard_init_linux.go: 178: le processus utilisateur exec a provoqué une "erreur de format exec"

chaque fois que j'exécute un conteneur de menu fixe spécifique avec CMD ou ENTRYPOINT, sans égard aux modifications apportées au fichier, à l'exception de la suppression de CMD ou de ENTRYPOINT. voici le fichier docker avec lequel j'ai travaillé et qui a parfaitement fonctionné il y a environ une heure:

 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"]
 

461voto

Marcus Ruddick Points 1238

J'ai oublié de mettre

 #!/bin/bash
 

en haut du fichier sh, le problème est résolu.

12voto

Ryan Allen Points 361

Une autre raison possible pourrait être si le fichier est enregistré avec les fins de ligne Windows (CRLF). Enregistrez-le avec les fins de ligne Unix (LF) et le fichier sera trouvé.

12voto

pme Points 2495

Extension à la réponse acceptée:

Pour une image alpine (sans bash):

 #!/bin/ash
 

en haut du fichier sh, résout le problème.

1voto

Omid Points 372

J'ai rencontré le même problème dans RHEL 7.3, docker 17.05-ce lors de l'exécution d'une image chargée hors connexion. Il est apparu que le pilote de stockage par défaut de RHEL / CentOS est passé de device-mapper à overlay. Le retour du pilote à devicemapper a résolu le problème.

 dockerd --storage-driver=devicemapper
 

ou

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

1voto

Piotr Kepka Points 103

Une autre possibilité est que #! / Bin / bash ne soit pas dans la toute première ligne. Il ne doit vraiment y avoir rien avant lui (pas de lignes vides, rien).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X