#linux #docker #permissions #python-3.6
Вопрос:
Я пытаюсь установить приложение python на базовый образ докера python3.6 (linux). Я пытался использовать виртуальный env, несмотря на то, что некоторые люди советуют не делать этого в docker. Я вижу, что требования были установлены в пакетах сайта python виртуальной env, но когда я перехожу к запуску кода из исходного каталога после активации виртуальной env, я получаю ошибку разрешения.
Мой Док-файл:
FROM python:3.6
WORKDIR /opt
# create a virtual environment and add it to PATH so that it is
applied for all future RUN and CMD calls (doesn't work)
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# Install Mono for pythonnet.
RUN apt-get update
amp;amp; apt-get install --yes
apt-transport-https
git
dirmngr
clang
gnupg
ca-certificates
amp;amp; apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --
recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
amp;amp; echo "deb http://download.mono-project.com/repo/debian
stretch/snapshots/5.20 main" | tee /etc/apt/sources.list.d/mono-
official-stable.list
amp;amp; apt-get update
amp;amp; apt-get install --yes
amp;amp; rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
COPY src ./src
COPY setup.py ./setup.py
COPY config.json ./config.json
COPY Utility.dll ./Utility.dll
COPY settings.ini ./settings.ini
COPY redis_conf.json ./redis_conf.json
COPY sql_config.json ./sql_config.json
RUN python3 -m venv $VIRTUAL_ENV
# From here on, use virtual env's python.
amp;amp; venv/bin/pip install --upgrade pip
amp;amp; venv/bin/pip install --no-cache-dir --upgrade pip setuptools wheel
amp;amp; venv/bin/pip install --no-cache-dir -r requirements.txt
amp;amp; venv/bin/pip install --no-cache-dir pycparser
amp;amp; venv/bin/pip install -U --no-cache-dir "pythonnet==2.5.1"
amp;amp; venv/bin/python setup.py install
Я проверил пакеты venv/lib/python3.6/site и вижу, что пакеты установлены. Однако, когда я запускаю это:
venv/lib/python3.6 src/my_app/app.py
Я получаю следующую ошибку: /bin/sh: 3: venv/lib/python3.6: Отказано в разрешении
Я попытался запустить chmod x * в каталоге lib, и код ошибки изменился, но я все равно получил ту же ошибку. Я не уверен, что мне нужно сделать, чтобы это сработало. Есть какие-нибудь идеи?
Комментарии:
1. Причина, по которой некоторые люди советуют не использовать
venv
в Docker, заключается в том, что контейнер самvenv
по себе является a. Если у вас есть одно приложение python для каждого контейнера (как и должно быть), то нет смысла его использоватьvenv
. Вы только создаете себе проблемы с его активацией, управлением правильными переменными Python, использованиемvenv/bin/pip
вместо простоpip
и так далее.2. Что касается проблемы, я предлагаю вам иметь оболочку внутри контейнера и попробовать запустить ее вручную. Для этого убедитесь, что в вашей
docker run
команде есть-it
ключи иsh
/ илиbash
в конце.3. Каков ваш имидж
CMD
? Как вы запускаете контейнер?4. @anemyte Я пытался запустить точку доступа из cli контейнера через рабочий стол docker, разве это не то же самое? У вас есть полный пример упомянутой вами команды run?
5. @DavidMaze Я перепробовал несколько различных вариантов, и теперь я просто использую cli на рабочем столе docker для эксперимента. До сих пор ничего не работало, но последнее, что я попробовал, было «cmd venv/lib/python3.6 src/my_app/app.py»