Настройка псевдонима в Dockerfile не работает: команда не найдена - PullRequest
2 голосов
/ 24 февраля 2020

В моем файле Docker есть следующее:

...
USER $user

# Set default python version to 3
RUN alias python=python3
RUN alias pip=pip3

WORKDIR /app

# Install local dependencies
RUN pip install --requirement requirements.txt --user

При создании изображения я получаю следующее:

 Step 13/22 : RUN alias pip=pip3
 ---> Running in dc48c9c84c88
Removing intermediate container dc48c9c84c88
 ---> 6c7757ea2724
Step 14/22 : RUN pip install --requirement requirements.txt --user
 ---> Running in b829d6875998
/bin/sh: pip: command not found

Почему pip не распознается, если я установил псевдоним прямо над ним?

Ps: я не хочу использовать .bashrc для загрузки псевдонимов.

1 Ответ

2 голосов
/ 24 февраля 2020

Проблема в том, что псевдоним существует только для этого промежуточного слоя в изображении. Попробуйте следующее:

FROM ubuntu

RUN apt-get update && apt-get install python3-pip -y

RUN alias python=python3

Тестирование здесь:

❰mm92400❙~/sample❱✔≻ docker build . -t testimage
...
Successfully tagged testimage:latest

❰mm92400❙~/sample❱✔≻ docker run -it testimage bash
root@78e4f3400ef4:/# python
bash: python: command not found
root@78e4f3400ef4:/#

Это связано с тем, что новый сеанс bash запускается для каждого слоя, поэтому псевдоним будет потерян в следующих слоях. .

Чтобы сохранить стабильный псевдоним, вы можете использовать символическую ссылку, как python в их официальном изображении :

FROM ubuntu

RUN apt-get update && apt-get install python3-pip -y 

# as a quick note, for a proper install of python, you would
# use a python base image or follow a more official install of python,
# changing this to RUN cd /usr/local/bin 
# this just replicates your issue quickly 
RUN cd "$(dirname $(which python3))" \
    && ln -s idle3 idle \
    && ln -s pydoc3 pydoc \
    && ln -s python3 python \ # this will properly alias your python
    && ln -s python3-config python-config

RUN python -m pip install -r requirements.txt

Обратите внимание на использование python3-pip пакет в комплекте пипс. При вызове pip лучше всего использовать синтаксис python -m pip, поскольку он гарантирует, что вызываемый вами пип связан с вашей установкой python:

python -m pip install -r requirements.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...