Как использовать профиль bash в dockerfile - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь создать образ, используя dockerfile.Команды в файле Docker выглядят примерно так:

FROM ubuntu:16.04
:
:
RUN pip3 install virtualenvwrapper  
RUN echo '# Python virtual environment wrapper' >> ~/.bashrc
RUN echo 'export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3' >> ~/.bashrc
RUN echo 'export WORKON_HOME=$HOME/.virtualenvs' >> ~/.bashrc
RUN echo 'source /usr/local/bin/virtualenvwrapper.sh' >> ~/.bashrc

После этих команд я буду использовать команды virtualenvwrapper для создания некоторых virtualenvs.

Если бы у меня были только переменные среды, с которыми нужно иметь дело в ~/.bashrc, я бы использовал ARG или ENV для их настройки.

Но теперь у меня есть и другие файлы сценариев оболочки, такие как virtualenvwrapper.sh, которые будут устанавливать некоторые свои собственные переменные.

Также, RUN source ~/.bashrc не работает (источник не найден).

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы не должны пытаться редактировать файлы точек оболочки, такие как .bash_profile в Dockerfile.Есть много распространенных путей, которые не проходят через оболочку ( например , CMD ["python", "myapp.py"] не будет запускать какую-либо оболочку и не будет читать .bash_profile).Если вам нужно глобально установить переменную среды в изображении, используйте директиву Dockerfile ENV.

Для приложения Python вам просто нужно установить свое приложение в "глобальный" Python образа, используя pip install. Вам специально не нужна виртуальная среда ;Docker предоставляет множество таких же возможностей изоляции (то, что вы pip install в Dockerfile не повлияет на глобально установленные пакеты вашей хост-системы).

Типичный Dockerfile приложения Python (скопировано из https://hub.docker.com/_/python/)может выглядеть так:

FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "./your-daemon-or-script.py"]

На последнем вопросе source - это расширение поставщика, которое предоставляют только некоторые оболочки; стандарт POSIX не требует его и по умолчанию /bin/shв Debian и Ubuntu этого не предоставляет.В любом случае, поскольку переменные окружения сбрасываются в каждой команде RUN, RUN source ... (или, более точно, RUN . ...) не разрешается, если в этом RUN ничего не происходитлиния.

0 голосов
/ 25 сентября 2018
  1. избегайте использования ~ => поместите ваш bashrc по определенному пути
  2. поместите исходный bashrc и вашу команду в одну строку RUN с;

строки RUNполностью независимы друг от друга для окружающей среды

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