Как правильно обрабатывать права доступа к файлам для приложения python в docker?

#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»