2017-02-27 29 views
16

泊塢窗開始引發此錯誤:standard_init_linux.go:178:EXEC用戶進程造成「EXEC格式錯誤」

standard_init_linux.go:178: exec user process caused "exec format error"

每當我運行CMD或入口點的特定泊塢窗容器,完全不考慮任何變化除了刪除CMD或ENTRYPOINT之外的文件。這裏是泊塢窗文件我一直在努力與完美的工作,直到大約一個小時前:

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

回答

44

我忘了把

#!/bin/bash 

在SH文件,解決問題的頂部。

+1

謝謝!經過一小時的頭髮拉動,10次檢查架構(arm/x64等)是否匹配,您的答案節省了一天的時間!對於像我這樣的創建linux docker的windows用戶,不要忘記從你的文件中刪除windows newline(\ r)字符,否則錯誤會不斷出現! –

+0

使用此解決方案後,我得到了它的工作,早些時候我面臨同樣的問題。 –

+1

我有一個空間在我的「#!/ bin/bash」 – ArunTejCh

1

另一個可能的原因可能是該文件與Windows行尾(CRLF)一起保存。用Unix行結尾保存(LF)並找到該文件。

0

我在RHEL 7.3中遇到同樣的問題,docker 17.05-ce運行離線加載的映像時。它似乎是RHEL/CentOS的默認存儲驅動程序從device-mapper更改爲覆蓋。將驅動程序還原爲devicemapper修復了問題。

dockerd --storage-driver=devicemapper 

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