Вы не должны пытаться редактировать файлы точек оболочки, такие как .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
ничего не происходитлиния.