django.db.utils.OperationalError:尝试写入只读数据库
我正在尝试部署我的第一个web应用程序 我使用的是django+docker+nginx+uwsgi。尝试首先在我的笔记本电脑中部署 当我使用django服务器运行我的web应用程序时,一切正常,当我尝试使用docker启动web应用程序而不使用nginx时,它看起来也正常,但是当我使用nginx代理时,在将数据写入DB(登录/注销用户会话)时出现问题。如果我只阅读网页,web应用程序可以很好地处理静态文件,并且在用户会话更改(登录/注销)期间崩溃 默认数据库的权限有问题 web_naas/Dockerfile根文件夹web_naas/django.db.utils.OperationalError:尝试写入只读数据库,django,docker,nginx,uwsgi,Django,Docker,Nginx,Uwsgi,我正在尝试部署我的第一个web应用程序 我使用的是django+docker+nginx+uwsgi。尝试首先在我的笔记本电脑中部署 当我使用django服务器运行我的web应用程序时,一切正常,当我尝试使用docker启动web应用程序而不使用nginx时,它看起来也正常,但是当我使用nginx代理时,在将数据写入DB(登录/注销用户会话)时出现问题。如果我只阅读网页,web应用程序可以很好地处理静态文件,并且在用户会话更改(登录/注销)期间崩溃 默认数据库的权限有问题 web_naas/D
# pull official base image
FROM python:3.8-alpine
# set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/scripts:${PATH}"
# install dependencies
COPY app/requirements.txt /requirements.txt
RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers
RUN pip install -r /requirements.txt
RUN apk del .tmp
# copy directory
RUN mkdir /app
COPY ./app /app
# set work directory
WORKDIR /app
# copy directory
COPY ./scripts /scripts
RUN chmod +x /scripts/*
RUN chmod 777 /app/db.sqlite3
RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/static
RUN adduser -D user
RUN chown -R user:user /vol
RUN chmod -R 777 /vol/web
USER user
CMD ["entrypoint.sh"]
web_naas/docker-compose.yml#根文件夹
version: '3.7'
services:
app:
build: .
ports:
- "8000:8000"
volumes:
- ./app:/app
command: sh -c "python manage.py runserver 0.0.0.0:8000"
environment:
- DEBUG=1
RUN chown -R user:user /app
docker-compose-deploy.yml
version: '3.7'
services:
app:
build: .
volumes:
- static_data:/vol/web
environment:
- DEBUG=1
proxy:
build:
context: ./proxy
volumes:
- static_data:/vol/static
ports:
- "8080:8080"
depends_on:
- app
volumes:
static_data:
web_naas/proxy/Dockerfile
FROM nginxinc/nginx-unprivileged:1-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./uwsgi_params /etc/nginx/uwsgi_params
USER root
RUN mkdir -p /vol/static
RUN chmod 777 /vol/static
USER nginx
web_naas/proxy/default.conf
server {
listen 8080;
location /static {
alias /vol/static;
}
location / {
uwsgi_pass app:8000;
include /etc/nginx/uwsgi_params;
}
}
web_naas/scripts/entrypoint.sh
#!/bin/sh
set -e
python manage.py collectstatic --noinput
uwsgi --socket :8000 --master --enable-threads --module naas.wsgi
问题是docker容器中缺少权限 在文件中添加了以下行 web_naas/Dockerfile#根文件夹
version: '3.7'
services:
app:
build: .
ports:
- "8000:8000"
volumes:
- ./app:/app
command: sh -c "python manage.py runserver 0.0.0.0:8000"
environment:
- DEBUG=1
RUN chown -R user:user /app
您的数据库也可以位于
var/
目录中。通过这种方式,让var/media
、var/database
、var/static
和mountvar
进入会更容易。此外,除非你有充分的理由,否则不要使用Alpine图像:@AKX i'v从我的repo中添加了其他文件,以获得更多的可见性和帮助。请举例说明我应该在哪里添加var/文件夹?正如我在Dockerfile的根文件夹中所理解的那样?