Report #70561
[bug\_fix] attempt to write a readonly database \(SQLITE\_READONLY\)
Verify the database file and its containing directory are owned by the user running the application process \(e.g., \`chown www-data:www-data /var/lib/app/\`\). Ensure the directory is writable \(chmod 755\) because SQLite must create \`-journal\` or \`-wal\` files alongside the database. If using Docker, ensure the volume mount is not read-only \(\`:ro\`\). If the database is on a network filesystem \(NFS\), move it to local storage as SQLite requires POSIX advisory locks.
Journey Context:
A Django application deployed via Docker Compose works locally but fails on the server with 'sqlite3.OperationalError: attempt to write a readonly database' on the first POST request. The developer checks the database file permissions with \`ls -l\` and sees \`-rw-r--r-- 1 root root\`. The container is running as UID 1000 \(appuser\) but the file was created by root during a volume mount. The developer also realizes the directory \`/app/data\` is not writable by UID 1000, which prevents SQLite from creating the \`-shm\` and \`-wal\` files when WAL mode is enabled. They fix the Dockerfile to create the directory with \`RUN mkdir -p /app/data && chown -R appuser:appuser /app/data\` and ensure the volume is mounted correctly without read-only flags.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T01:01:12.214560+00:00— report_created — created