Dockerizing frappe for development and production
# Clone the repo
git clone git@github.com:shridarpatil/frappe-docker.git
cd frappe-docker
# Pull docker image
docker pull shridh0r/frappe:develop
# Start in dev mode (with logs)
./bench-docker up --dev
# Create a new site
./bench-docker shell
bench new-site site1.local --force --db-root-password root
bench buildUse ./bench-docker to manage containers:
./bench-docker up # Start detached (MariaDB)
./bench-docker up --dev # Dev mode with logs (foreground)
./bench-docker up --postgres # Use PostgreSQL instead of MariaDB
./bench-docker up --workers # Include background workers + scheduler
./bench-docker up --socketio # Include socketio
./bench-docker up --prod # Production (all services)
./bench-docker up --dev --workers # Dev mode with workers
./bench-docker up --dev --postgres # Dev mode with PostgreSQL./bench-docker down # Stop all containers
./bench-docker restart # Restart containers
./bench-docker logs # Follow web-app logs
./bench-docker shell # Open bash in web-app container
./bench-docker bench migrate # Run bench commands
./bench-docker bench build # Build assets
./bench-docker list-apps # Show installed apps
./bench-docker help # Show all commandsNo need to edit docker-compose.yml - apps are auto-discovered!
./bench-docker new-app my_custom_app
./bench-docker up --dev
./bench-docker bench --site site1.local install-app my_custom_app./bench-docker get-app https://github.com/frappe/erpnext
# Or with a specific branch
./bench-docker get-app https://github.com/frappe/erpnext version-15
./bench-docker up --dev
./bench-docker bench --site site1.local install-app erpnext| Service | Profile | Description |
|---|---|---|
| web-app | (always) | Main Frappe web server |
| redis | (always) | Cache and queue backend |
| mariadb | --mariadb (default) |
MariaDB database |
| postgres | --postgres |
PostgreSQL database |
| nginx | (always) | Reverse proxy |
| default-worker | --workers |
Background job worker (default queue) |
| long-worker | --workers |
Background job worker (long queue) |
| short-worker | --workers |
Background job worker (short queue) |
| scheduler | --workers |
Job scheduler |
| socketio | --socketio |
Real-time updates |
docker-compose build| Arg | Description |
|---|---|
| FRAPPE_PATH | Frappe repo URL |
| FRAPPE_BRANCH | Frappe branch name |
| FRAPPE_PYTHON | Python version |
| BENCH_PATH | Bench repo URL |
| BENCH_BRANCH | Bench branch name |
Example:
docker-compose build \
--build-arg FRAPPE_PATH=https://github.com/zerodhatech/frappe.git \
--build-arg FRAPPE_BRANCH=zero_v12# Start with MariaDB (default)
./bench-docker up --dev
./bench-docker shell
bench new-site site1.local --force --db-root-password root
# OR start with PostgreSQL
./bench-docker up --dev --postgres
./bench-docker shell
bench new-site site1.local --force --db-type postgres --db-host postgres --db-root-username postgres --db-root-password rootfrappe-docker/
├── apps/ # App source code (auto-mounted)
│ ├── frappe/
│ └── your_app/
├── sites/
│ ├── apps.txt # List of apps to install
│ ├── apps.json # App metadata
│ └── site1.local/ # Site data
├── docker-compose.yml # Service definitions
├── bench-docker # CLI wrapper
├── Makefile # Build automation
└── run.sh # Container startup script