Запуск pip install needs.txt завершается ошибкой в ​​docker build - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь создать образ docker для модели машинного обучения, но он не работает, если я пытаюсь установить его из файла needs.txt, но если я запускаю файл ниже docker, он успешно запускается

. мой docker файл:

FROM alpine:latest

RUN mkdir -p /home/ePortalService
WORKDIR /home/ePortalService

COPY requirements.txt /home/ePortalService

RUN apk --update add --virtual scipy-runtime python py-pip \
    && apk add --virtual scipy-build \
        build-base python-dev openblas-dev freetype-dev pkgconfig gfortran lapack-dev \
    && ln -s /usr/include/locale.h /usr/include/xlocale.h \
    && pip install --no-cache-dir numpy \
    && pip install --no-cache-dir pandas \
    && pip install --no-cache-dir matplotlib>=3.0.0 \
    && pip install --no-cache-dir scipy \
    && apk del scipy-build \
    && apk add --virtual scipy-runtime \
        freetype libgfortran libgcc libpng  libstdc++ musl openblas tcl tk \
    && rm -rf /var/cache/apk/*

Если я попытаюсь вручную запустить pip install numpy, то весь путь к pip install scipy работает.

Я в конечном итоге собираюсь сделать Этот файл examples.txt должен быть частью сценария сборки Dockerfile docker образа (без использования virtualenv внутри образа docker), но это выдает ошибку

Любые идеи, почему он работает вручную, но не автоматически, и как исправить это?

следующее - это журнал ошибок:

Sending build context to Docker daemon  421.4MB
Step 1/6 : FROM alpine:latest
 ---> cc0abc535e36
Step 2/6 : RUN mkdir -p /home/ePortalService
 ---> Running in 8f47d4b7dea3
Removing intermediate container 8f47d4b7dea3
 ---> b0bc3aacada2
Step 3/6 : WORKDIR /home/ePortalService
 ---> Running in 84378138f606
Removing intermediate container 84378138f606
 ---> 3f907a00b6ed
Step 4/6 : COPY requirements.txt /home/ePortalService
 ---> 8c691dc5aaaf
Step 5/6 : RUN apk --update add --virtual scipy-runtime python py-pip     && apk add --virtual scipy-build         build-base python-dev openblas-dev freetype-dev pkgconfig gfortran lapack-dev     && ln -s /usr/include/locale.h /usr/include/xlocale.h     && pip install --no-cache-dir -r requirements.txt     && apk del scipy-build     && apk add --virtual scipy-runtime         freetype libgfortran libgcc libpng  libstdc++ musl openblas tcl tk     && rm -rf /var/cache/apk/*
 ---> Running in 185848aecaaa
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/13) Installing libbz2 (1.0.8-r1)
(2/13) Installing expat (2.2.9-r1)
(3/13) Installing libffi (3.2.1-r6)
(4/13) Installing gdbm (1.13-r1)
(5/13) Installing ncurses-terminfo-base (6.1_p20191130-r0)
(6/13) Installing ncurses-terminfo (6.1_p20191130-r0)
(7/13) Installing ncurses-libs (6.1_p20191130-r0)
(8/13) Installing readline (8.0.1-r0)
(9/13) Installing sqlite-libs (3.30.1-r1)
(10/13) Installing python2 (2.7.16-r3)
(11/13) Installing py-setuptools (42.0.2-r0)
(12/13) Installing py2-pip (18.1-r0)
(13/13) Installing scipy-runtime (20200107.074517)
Executing busybox-1.31.1-r8.trigger
OK: 65 MiB in 27 packages
(1/35) Installing libgcc (9.2.0-r3)
(2/35) Installing libstdc++ (9.2.0-r3)
(3/35) Installing binutils (2.33.1-r0)
(4/35) Installing libmagic (5.37-r1)
(5/35) Installing file (5.37-r1)
(6/35) Installing gmp (6.1.2-r1)
(7/35) Installing isl (0.18-r0)
(8/35) Installing libgomp (9.2.0-r3)
(9/35) Installing libatomic (9.2.0-r3)
(10/35) Installing mpfr4 (4.0.2-r1)
(11/35) Installing mpc1 (1.1.0-r1)
(12/35) Installing gcc (9.2.0-r3)
(13/35) Installing musl-dev (1.1.24-r0)
(14/35) Installing libc-dev (0.7.2-r0)
(15/35) Installing g++ (9.2.0-r3)
(16/35) Installing make (4.2.1-r2)
(17/35) Installing fortify-headers (1.1-r0)
(18/35) Installing build-base (0.5-r1)
(19/35) Installing pkgconf (1.6.3-r0)
(20/35) Installing python2-dev (2.7.16-r3)
(21/35) Installing libquadmath (9.2.0-r3)
(22/35) Installing libgfortran (9.2.0-r3)
(23/35) Installing gfortran (9.2.0-r3)
(24/35) Installing openblas-ilp64 (0.3.7-r2)
(25/35) Installing openblas (0.3.7-r2)
(26/35) Installing openblas-dev (0.3.7-r2)
(27/35) Installing libpng (1.6.37-r1)
(28/35) Installing freetype (2.10.1-r0)
(29/35) Installing zlib-dev (1.2.11-r3)
(30/35) Installing libpng-dev (1.6.37-r1)
(31/35) Installing freetype-dev (2.10.1-r0)
(32/35) Installing blas (3.9.0-r1)
(33/35) Installing lapack (3.9.0-r1)
(34/35) Installing lapack-dev (3.9.0-r1)
(35/35) Installing scipy-build (20200107.074518)
Executing busybox-1.31.1-r8.trigger
OK: 326 MiB in 62 packages
Collecting Click (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
Collecting cycler (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl
Collecting Flask (from -r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl (94kB)
Collecting itsdangerous (from -r requirements.txt (line 4))
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting Jinja2 (from -r requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl (125kB)
Collecting joblib (from -r requirements.txt (line 6))
  Downloading https://files.pythonhosted.org/packages/28/5c/cf6a2b65a321c4a209efcdf64c2689efae2cb62661f8f6f4bb28547cf1bf/joblib-0.14.1-py2.py3-none-any.whl (294kB)
Collecting kiwisolver (from -r requirements.txt (line 7))
  Downloading https://files.pythonhosted.org/packages/16/e7/df58eb8868d183223692d2a62529a594f6414964a3ae93548467b146a24d/kiwisolver-1.1.0.tar.gz
Collecting MarkupSafe (from -r requirements.txt (line 8))
  Downloading https://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094/MarkupSafe-1.1.1.tar.gz
Collecting mlxtend (from -r requirements.txt (line 9))
  Downloading https://files.pythonhosted.org/packages/52/04/c362f34f666f0ddc7cf593805e64d64fa670ed96fd9302e68549dd48287d/mlxtend-0.17.0-py2.py3-none-any.whl (1.3MB)
Collecting pandas (from -r requirements.txt (line 10))
  Downloading https://files.pythonhosted.org/packages/b2/4c/b6f966ac91c5670ba4ef0b0b5613b5379e3c7abdfad4e7b89a87d73bae13/pandas-0.24.2.tar.gz (11.8MB)
    Complete output from command python setup.py egg_info:
    WARNING: The wheel package is not available.
      Failed building wheel for numpy
      Failed cleaning build dir for numpy
    ERROR: Failed to build one or more wheels
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-9fKYgP/pandas/setup.py", line 746, in <module>
        **setuptools_kwargs)
      File "/usr/lib/python2.7/site-packages/setuptools/__init__.py", line 144, in setup
        _install_setup_requires(attrs)
      File "/usr/lib/python2.7/site-packages/setuptools/__init__.py", line 139, in _install_setup_requires
        dist.fetch_build_eggs(dist.setup_requires)
      File "/usr/lib/python2.7/site-packages/setuptools/dist.py", line 721, in fetch_build_eggs
        replace_conflicting=True,
      File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 782, in resolve
        replace_conflicting=replace_conflicting
      File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1065, in best_match
        return self.obtain(req, installer)
      File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1077, in obtain
        return installer(requirement)
      File "/usr/lib/python2.7/site-packages/setuptools/dist.py", line 777, in fetch_build_egg
        return fetch_build_egg(self, req)
      File "/usr/lib/python2.7/site-packages/setuptools/installer.py", line 130, in fetch_build_egg
        raise DistutilsError(str(e))
    distutils.errors.DistutilsError: Command '['/usr/bin/python2', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmp6GfJkV', '--quiet', 'numpy>=1.12.0']' returned non-zero exit status 1

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-9fKYgP/pandas/
The command '/bin/sh -c apk --update add --virtual scipy-runtime python py-pip     && apk add --virtual scipy-build         build-base python-dev openblas-dev freetype-dev pkgconfig gfortran lapack-dev     && ln -s /usr/include/locale.h /usr/include/xlocale.h     && pip install --no-cache-dir -r requirements.txt     && apk del scipy-build     && apk add --virtual scipy-runtime         freetype libgfortran libgcc libpng  libstdc++ musl openblas tcl tk     && rm -rf /var/cache/apk/*' returned a non-zero code: 1

Я не могу найти фактическую причину, поскольку какая ошибка здесь была сделана

Ответы [ 3 ]

1 голос
/ 12 января 2020

Попробуйте ниже и установите wheel


FROM alpine:latest

RUN mkdir -p /home/ePortalService
WORKDIR /home/ePortalService

COPY requirements.txt /home/ePortalService

RUN apk --update add --virtual scipy-runtime python py-pip \
    && apk add --virtual scipy-build \
        build-base python-dev openblas-dev freetype-dev pkgconfig gfortran lapack-dev \
    && ln -s /usr/include/locale.h /usr/include/xlocale.h \
    && pip install --no-cache-dir -U pip wheel setuptools \
    && pip install --no-cache-dir requirements.txt \
    && apk del scipy-build \
    && apk add --virtual scipy-runtime \
        freetype libgfortran libgcc libpng  libstdc++ musl openblas tcl tk \
    && rm -rf /var/cache/apk/*```
0 голосов
/ 12 января 2020

Вы можете использовать slim images :

Рассмотрите этот Dockerfile:

FROM python:3.7-slim
RUN pip install numpy pandas scipy matplotlib

с результирующим размером: 504MB

Хотя это не Наименьший возможный размер, в этом случае вам не нужно находить зависимости (иногда это может быть очень сложно), особенно для математических библиотек.

0 голосов
/ 07 января 2020

Версия python -setuptools в репозитории пакетов может быть устаревшей / не поддерживаемой. Обновите его с помощью pip вместо того, чтобы полагаться на менеджер пакетов, добавьте этот шаг в ваш dockerfile, в котором вы pip install --upgrade setuptools перед установкой python пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...