web-dev-qa-db-fra.com

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

docker a commencé à lancer 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 autres que la suppression de CMD ou ENTRYPOINT. voici le fichier docker avec lequel j'ai travaillé et qui a fonctionné parfaitement 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"]
28
Marcus Ruddick

J'ai oublié de mettre 

#!/bin/bash

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

80
Marcus Ruddick

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é.

2
Ryan Allen

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. Rétablir le pilote sur devicemapper a résolu le problème.

dockerd --storage-driver=devicemapper

ou

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

Ajouter ce code

   #!/usr/bin/env bash

en haut de votre fichier de script.

0
rainstop3

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

0
Piotr Kepka

Extension à la réponse acceptée:

Pour une image Alpine (sans bash):

#!/bin/ash

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

0
pme

Pas une réponse directe à la question posée. Bien que j'aie eu l'erreur en appelant "docker-compos up" pour mettre en place mon application nodejs. A réalisé que dans mon "Dockerfile" j'avais CMD ["./server.js"].

Pour résoudre ce problème, je l'ai remplacé par CMD ["npm","start"] et le problème a été résolu. Espérons que si quelqu'un atterrit ici pour cette exception trouvera cela utile.

0
Vijay Yadav