fix: resolve SQLITE_CANTOPEN with Docker volume permissions - #48
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
When running Atom in Docker with a host-mounted volume for
/app/data, the SQLite database fails withSQLITE_CANTOPENbecause the non-rootnextjsuser (uid 1001) cannot write to the root-owned mounted directory.Root Cause
The Dockerfile switches to a non-root user before starting the app, but host-mounted volumes are typically owned by root. The
nextjsuser lacks write permissions to create or modify the SQLite database files.Solution
docker-entrypoint.shthat runs as root on startup, fixes ownership of/app/datatonextjs:nodejs, then drops privileges viasu-execbefore starting the Node.js serversu-execin the Docker image for secure privilege dropping.gitattributesto ensure shell scripts maintain LF line endings across platformsChanges
Dockerfile: Added su-exec package, entrypoint script copy, replaced USER/CMD with ENTRYPOINTdocker-entrypoint.sh: New entrypoint handling volume permissions.gitattributes: Enforce LF endings for .sh files