Как исправить Sqlite Operationalerror: попытка написать базу данных только для чтения «в приложении Dockerized FlaskPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как исправить Sqlite Operationalerror: попытка написать базу данных только для чтения «в приложении Dockerized Flask

Сообщение Anonymous »

Я хочу использовать SQLite DB в контейнере Docker, но когда я пытаюсь добавить или изменить данные, я получаю эту ошибку < /p>
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app.py", line 67, in create_user
add_user(data['name'], data['unit'], data['email'], data['password'])
File "/app/app.py", line 29, in add_user
cur.execute("INSERT INTO Users (Name, Unit, Email, Password) VALUES (?, ?, ?, ?)",
sqlite3.OperationalError: attempt to write a readonly database
2025-02-24 21:28:03,229 - INFO - 172.18.0.2 - - [24/Feb/2025 21:28:03] "POST /post-user/create-user HTTP/1.1" 500 -
2025-02-24 21:28:17,293 - ERROR - Exception on /post-user/create-user [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app.py", line 67, in create_user
add_user(data['name'], data['unit'], data['email'], data['password'])
File "/app/app.py", line 29, in add_user
cur.execute("INSERT INTO Users (Name, Unit, Email, Password) VALUES (?, ?, ?, ?)",
sqlite3.OperationalError: attempt to write a readonly database
< /code>
my docker file < /p>
ARG PYTHON_VERSION=3.12.7
FROM python:${PYTHON_VERSION}-slim as base

# Prevents Python from writing pyc files.
ENV PYTHONDONTWRITEBYTECODE=1

# Keeps Python from buffering stdout and stderr to avoid situations where
# the application crashes without emitting any logs due to buffering.
ENV PYTHONUNBUFFERED=1

WORKDIR /app

# Create a non-privileged user that the app will run under.
# See https://docs.docker.com/go/dockerfile-u ... practices/
ARG UID=10001
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
appuser

# Download dependencies as a separate step to take advantage of Docker's caching.
# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds.
# Leverage a bind mount to requirements.txt to avoid having to copy them into
# into this layer.
COPY . .
USER root
# Install dependencies using cache and bind mount for requirements.txt
RUN --mount=type=cache,target=/root/.cache/pip \
--mount=type=bind,source=requirements.txt,target=requirements.txt \
python -m pip install -r requirements.txt

# Create log file and update permissions
RUN mkdir -p /app && touch /app/logs.log && chmod 666 /app/logs.log

# Switch to the non-privileged user to run the application.
USER appuser

# Copy the source code into the container.
COPY . .

# Expose the port that the application listens on.
EXPOSE 4040

# Run the application.
CMD gunicorn app:app --bind=0.0.0.0:8000
< /code>
my compose file < /p>
version: "3.8"

services:
python_app:
build: .
ports:
- "8000:8000" # Exposing Flask on port 8000
networks:
- main-internal-net

depends_on:
- ngrok
entrypoint: >
/bin/sh -c "sleep 10 && python ngrok_url.py && flask run --host=0.0.0.0 --port=8000"

ngrok:
image: ngrok/ngrok:latest
command:
- "http"
- "--url=${URL}"
- "http://python_app:8000"
environment:
NGROK_AUTHTOKEN: ${API_NGROK}
ports:
- "4040:4040"
networks:
- main-internal-net

networks:
main-internal-net:
driver: bridge
< /code>
Использование < /p>
con = sqlite3.connect("identifier.sqlite")
cur = con.cursor()
cur.execute("INSERT INTO Users (Name, Unit, Email, Password) VALUES (?, ?, ?, ?)",
(name, unit, email, password))
con.commit()
con.close()
< /code>
Я пробовал решения по аналогичным разрешенным вопросам по переполнению стека, но они не работали для меня. Я также пытался вручную изменить разрешения на файл в терминале Docker, но проблема сохраняется.

Подробнее здесь: https://stackoverflow.com/questions/794 ... abase-in-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»