django.db.utils.OperationalError:尝试写入只读数据库

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

我正在尝试部署我的第一个web应用程序

我使用的是django+docker+nginx+uwsgi。尝试首先在我的笔记本电脑中部署

当我使用django服务器运行我的web应用程序时,一切正常,当我尝试使用docker启动web应用程序而不使用nginx时,它看起来也正常,但是当我使用nginx代理时,在将数据写入DB(登录/注销用户会话)时出现问题。如果我只阅读网页,web应用程序可以很好地处理静态文件,并且在用户会话更改(登录/注销)期间崩溃

默认数据库的权限有问题

web_naas/Dockerfile根文件夹web_naas/

# 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
和mount
var
进入会更容易。此外,除非你有充分的理由,否则不要使用Alpine图像:@AKX i'v从我的repo中添加了其他文件,以获得更多的可见性和帮助。请举例说明我应该在哪里添加var/文件夹?正如我在Dockerfile的根文件夹中所理解的那样?