Django и gurobi в docker имеют проблемы с разрешениями

Я пытаюсь создать образ docker для Django + Gurobi.

  • Контейнер по умолчанию запускается от имени root.
  • Gurobi не хочет запускаться от имени root, так как лицензия выдана пользователю не root.
  • При переключении на не root, питон Django жалуется на "попытку записи базы данных только для чтения", используя /db.sqlite3.
  • chown+chmod только /apps, /db.sqlite3, и /usr/local/lib/python3.9/site-packages/django/db/backends/sqlite3 не помогли.
  • проблема, похоже, исчезнет, если я chown и chmod 777 весь контейнер: плохая идея
  • .

Каково решение? Ниже приведен Dockerfile

FROM python:3.9

COPY . .
ADD data .

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

ENV APP_USER=user32
ENV APP_HOME=/home/$APP_USER

# install python dependencies
RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --upgrade pip 

RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --no-cache-dir -r requirements.txt


RUN apt-get update && apt-get install -y inetutils-ping

RUN tar xvzf gurobi9.5.0_linux64.tar.gz
ENV GUROBI_HOME /gurobi950/linux64
RUN cd /gurobi950/linux64 && python setup.py install
RUN rm gurobi9.5.0_linux64.tar.gz

RUN groupadd -r $APP_USER && \
    useradd -r -g $APP_USER -d $APP_HOME -s /sbin/nologin -c "Docker image user" $APP_USER

    
ENV TZ 'America/Los_Angeles'
RUN echo $TZ > /etc/timezone && apt-get update && \
    apt-get install -y tzdata && \
    rm /etc/localtime && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata && \
    apt-get clean
        
#RUN chown -R $APP_USER:$APP_USER $APP_HOME
#RUN chown -R $APP_USER:$APP_USER /apps/
#RUN chown -R $APP_USER:$APP_USER /data/
#RUN chown -R $APP_USER:$APP_USER /gurobi950/
#RUN chown -R  $APP_USER:$APP_USER  /usr/local/lib/python3.9/
#RUN chown -R  $APP_USER:$APP_USER  /db.sqlite3
#RUN chmod -R 777 /db.sqlite3
#RUN chmod -R 777 /apps
#RUN chmod -R 777 /usr/local/lib/python3.9
#RUN chmod -R 777 /gurobi950
#RUN chown -R $APP_USER:$APP_USER /
#RUN chmod -R 777 /

ENV GRB_LICENSE_FILE /gurobi.lic
ENV LD_LIBRARY_PATH=/gurobi950/linux64/lib
RUN /gurobi950/linux64/bin/gurobi_cl --version

WORKDIR /

# running migrations
RUN python manage.py migrate

USER $APP_USER

# gunicorn
CMD ["gunicorn", "--config", "gunicorn-cfg.py", "core.wsgi"]

По умолчанию коммерческое программное обеспечение, такое как Gurobi, не позволяет запускать его внутри контейнера Docker. Пожалуйста, свяжитесь со службой поддержки Gurobi по адресу https://support.gurobi.com для обсуждения альтернатив.

Вернуться на верх