Important Concept: Immutability and Persistence
A frequent source of confusion is how Docker-based Frappe deployments handle persistence.
Containers Are Immutable
Docker containers are not meant to be modified after they are built. You should only change:
- Environment variables
- Mounted volumes
- The Docker image itself (via rebuild)
What Is Persistent
Typically, only these paths are persisted:
- Site data (
/sites) - Database storage
This allows you to:
- Create new sites
- Run migrations
- Perform backups and restores
- Recreate containers safely
Installing Apps After Deployment
❌ Not Supported
Installing apps into a running container is not supported.
bench get-app is an examples of an common but unsupported action.
Why?
- Apps are part of the Docker image
- Runtime changes are lost on container recreation
- This ensures reproducibility and stability
Correct Workflow
- Add the app to the image build configuration
- Rebuild the Docker image
- Redeploy the stack
This applies to all production-oriented setups.
