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 для обсуждения альтернатив.