【发布时间】:2022-01-15 06:41:20
【问题描述】:
我正在尝试为 Django + Gurobi 创建一个 docker 映像。
- 容器默认以root身份运行。
- Gurobi 不想以 root 身份运行,因为许可证已颁发给非 root 用户。
- 如果切换到非 root,Django 的 python 会抱怨“尝试使用 /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"]
这是导航到主页时的错误
Request Method: POST
Request URL: http://localhost/login/?next=/
Django Version: 3.2.6
Exception Type: OperationalError
Exception Value:
attempt to write a readonly database
Exception Location: /usr/local/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py, line 423, in execute
Python Executable: /usr/local/bin/python
Python Version: 3.9.9
Python Path:
['/',
'/usr/local/bin',
'/usr/local/lib/python39.zip',
'/usr/local/lib/python3.9',
'/usr/local/lib/python3.9/lib-dynload',
'/usr/local/lib/python3.9/site-packages',
'/usr/local/lib/python3.9/site-packages/IPython/extensions']
【问题讨论】:
标签: django docker docker-compose gurobi