Почему Dockered Centos не распознает пипс? - PullRequest
1 голос
/ 08 марта 2019

Я хочу создать контейнер с python и несколькими пакетами поверх centos.Я попытался выполнить несколько команд внутри контейнера raw centos.Все работало нормально Я установил все что хочу.Затем я создал Dockerfile с теми же командами, выполненными через RUN, и я получаю /bin/sh: pip: command not found Что может быть не так?Я имею в виду ситуацию на всех.Почему все может быть выполнено в командной строке, но не может быть выполнено с RUN?Я пробовал оба варианта:

RUN command
RUN command
RUN pip install ...

и

RUN command\
    && command\
    && pip install ...

Команды, которые я выполняю:

from centos

run yum install -y centos-release-scl\
    && yum install -y rh-python36\
    && scl enable rh-python36 bash\
    && pip install django

UPD: Полный путьПипу помогло.Что не так?

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Сначала вам нужно установить pip с помощью

yum install python-pip

или, если вам нужен python3 (из epel)

yum install python36-pip

Если вы не уверены, спросите yum:

yum whatprovides /usr/bin/pip

python2-pip-18.1-1.fc29.noarch : A tool for installing and managing Python 2 packages
Repo        : @System
Matched from:
Filename    : /usr/bin/pip

python2-pip-18.1-1.fc29.noarch : A tool for installing and managing Python 2 packages
Repo        : updates
Matched from:
Filename    : /usr/bin/pip

python2-pip-18.0-4.fc29.noarch : A tool for installing and managing Python 2 packages
Repo        : fedora
Matched from:
Filename    : /usr/bin/pip

Этот вывод от Fedora29, но вы должны получить аналогичный результат в Centos / RHEL

ОБНОВЛЕНИЕ

Из комментария

Но когда я выполняю те же команды из Docker, запускаю -ti centos, все в порядке.В чем проблема?

Может у тебя PATH как-то сломан?Можете ли вы попробовать полный путь к пунктам?

1 голос
/ 08 марта 2019

Как уже упоминалось @ rkosegi , это должна быть проблема PATH.Кажется, работает следующее:

FROM centos
ENV PATH /opt/rh/rh-python36/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN yum install -y centos-release-scl
RUN yum install -y rh-python36
RUN scl enable rh-python36 bash
RUN pip install django

Я "нашел" вышеприведенное PATH, запустив контейнер centos и набрав команды одну за другой (поскольку вы упомянули, что он работает).


На слайдах BMitch есть хорошее объяснение: sudo-bmitch.github.io / Presentations / dc2018/faq-stackoverflow.html#24

В: Почему не работает RUN?

Почему я получаю ./build.sh не найдено?

RUN cd /app/srcRUN ./build.sh
  • Единственная часть, сохраненная из RUN, - это файловая система (как новый слой).
  • Переменные среды, запущенные демоны и состояние оболочки отбрасываются с помощью временнойконтейнер при выходе из pid 1.

  • Решение: объединить несколько строк с &&:

    RUN cd /app/src && ./build.sh
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...