[KNIMER/ERPNext] Ask for help here for Docker Image knimer/erpnext

Hello,

Some times, good things that benefit everyone comes from the struggle of an individual.
I built the image knimer/erpnext to help me automate deployments. It helped @Clamsy deploy in a contained and special setup on a Synology box.

I notice a 6 Stars and more than 6,000 pulls.

Also, the image is frequently updated more than many other published images.

So, this is a thread to help anyone with the use of this Docker image:
knimer/erpnext Docker image

Ask here what you need with regards to this Docker image and docker setup in general.

Good luck

1 Like

Thanks for this…

Comming from a school environment the education app is missing

Hello @asieftejani

The LMS App is available in almost all image versions.
Which image version are you using?

I mean which tag - example: v15:20251215

Provide me the tag in order to double check for you.

I am not refering to the LMS app - GitHub - frappe/lms: Easy to Use, 100% Open Source Learning Management System
I would like to use the education app - GitHub - frappe/education: Open source education / school management system or Education | Frappe Cloud Marketplace
hope the distinction is clear now

Hello @asieftejani
Ahh… I see. I will look into adding it.

Thanks for the hint.

How do I run this? Is there a detailed usage tutorial? For example, how to write a docker-compose file?

Try this if its what you are looking for: -

Hello,

You can use the docker compose files used in the official docker repo. They offer a Main Compose file + Override Compose files that serve different purposes - Backup (Backup is not enabled by default), MariaDB, Traefik, No-proxy setup, Redis, Multi-bench…).

You can start with:

Main Compose File

Also, add the overrides you want from the same repo under:
Overrides/

Simply do:

Create the .env file with the needed vars in the compose file(s).

Modify the main compose file and any override compose files you need.

Run (this is an example, add needed override compose files as needed in your case…):

docker compose -f docker-compose.yml -f overrides/compose.noproxy.yaml up -d

I personally use these compose files and customize as needed.

Keep in mind that:

  • Your Custom App will be deleted when you update the image! As it is no longer there in the new containers running the new image.
    You will need to manually install it again. Data loss is a high probability.
  • So, always use your custom image. Build it with your Custom Apps included. Which will give you the ability to update these Apps as needed, run before install and after install hooks to make sure data is kept.

Any other questions? let me know.
Also, provide as much details as you can. It will help to give a more relevant answer.

Enjoy.


AndreWerner

DANKE!!!
Nach Ăźber 6 Wochen auf der Suche nach einer ordentlichen Installation (ich bin halt kein ITler) endlich mit diesem Image der Druchbruch!!!

VIELEN LIEBEN DANK FÜR DIE MÜHE!!!

DANKE!!!
Nach Ăźber 6 Wochen auf der Suche nach einer ordentlichen Installation (ich bin halt kein ITler) endlich mit diesem Image der Druchbruch!!!

VIELEN LIEBEN DANK FÜR DIE MÜHE!!!

1 Like

Hello @AndreWerner

This is the beauty of a supportive community.
Welcome to the Frappe/ERPNext ecosystem and community.

Happy that the image solved your problems.

K

New Update

This is a self contained image = All Apps listed below are already baked into the image!

It means you do not need to: bench get-app <...>
It means the Apps will survive the docker compose down and docker compose up

For help relevant to this image, please post your issue/question in the following Frappe Forum thread.
knimer/erpnext Support Thread

I will try my best to answer within 24 hours.

Keep in mind, this is a production Image.

It includes the following:

  • Frappe Framework, v15.95.0
  • ERPNext, v15.94.1
  • Frappe HRMS, v15.54.3
  • Frappe CRM, v1.57.2
  • Frappe Helpdesk, v1.18.1
  • Frappe Builder, v1.21.2
  • Print Designer, v1.6.5
  • Frappe Insights, v3.2.21
  • Frappe Drive, v0.3.0
  • Frappe LMS, v2.44.0
  • Mint, v1.2.0
  • Raven, v2.6.6
  • WooCommerce Integration, v15.0.3
  • eCommerce Integrations, v1.20.2
  • ERPNext Shipping, v15.1.1
  • Website Leads, v1.0.10
  • Telephony, develop
  • Frappe Payments, develop
  • Frappe Webshop, develop
  • Frappe Wiki, master
  • Gameplan, develop

Pull latest image using:

docker pull knimer/erpnext:v15.20260109

You just need to create a bench site and install the Apps you want into that site using bench.

**09-January-2026

ENJOY**

1 Like

Is there a corresponding docker-compose.yml file?

Agreed - Production image is all well but I would much rather have more control over where the data and config is stored etc. I’ve never had much luck with the custom image.

Once I run the container and docker exec to create a new bench site, I keep getting socket errors looks to be a db error or can’t connect to mysql server.

services:
backend:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
deploy:
restart_policy:
condition: on-failure
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
environment:
DB_HOST: db
DB_PORT: “3306”
MYSQL_ROOT_PASSWORD: admin89135
MARIADB_ROOT_PASSWORD: admin89135

configurator:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
deploy:
restart_policy:
condition: none
entrypoint:
- bash
- -c
command:
- >
ls -1 apps > sites/apps.txt;
bench set-config -g db_host $$DB_HOST;
bench set-config -gp db_port $$DB_PORT;
bench set-config -g redis_cache “redis://$$REDIS_CACHE”;
bench set-config -g redis_queue “redis://$$REDIS_QUEUE”;
bench set-config -g redis_socketio “redis://$$REDIS_QUEUE”;
bench set-config -gp socketio_port $$SOCKETIO_PORT;
environment:
DB_HOST: db
DB_PORT: “3306”
REDIS_CACHE: redis-cache:6379
REDIS_QUEUE: redis-queue:6379
SOCKETIO_PORT: “9000”
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs

create-site:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
deploy:
restart_policy:
condition: none
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
entrypoint:
- bash
- -c
command:
- >
wait-for-it -t 120 db:3306;
wait-for-it -t 120 redis-cache:6379;
wait-for-it -t 120 redis-queue:6379;
export start=date +%s;
until [[ -n grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty" ]] &&
[[ -n grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty" ]] &&
[[ -n grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty" ]];
do
echo “Waiting for sites/common_site_config.json to be created”;
sleep 5;
if (( date +%s-start > 120 )); then
echo “could not find sites/common_site_config.json with required keys”;
exit 1
fi
done;
echo “sites/common_site_config.json found”;
bench new-site --mariadb-user-host-login-scope=‘%’ --admin-password=admin89135 --db-root-username=root --db-root-password=admin89135 --install-app erpnext --set-default frontend;

db:
image: crpi-yapdvlijt6tz8auk.cn-chengdu.personal.cr.aliyuncs.com/sclifei/mariadb:10.6
networks:
- frappe_network
healthcheck:
test: mysqladmin ping -h localhost --password=admin89135
interval: 1s
retries: 20
deploy:
restart_policy:
condition: on-failure
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
- --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
environment:
MYSQL_ROOT_PASSWORD: admin89135
MARIADB_ROOT_PASSWORD: admin89135
volumes:
- db-data:/var/lib/mysql

frontend:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
depends_on:
- websocket
deploy:
restart_policy:
condition: on-failure
command:
- nginx-entrypoint.sh
environment:
BACKEND: backend:8000
FRAPPE_SITE_NAME_HEADER: frontend
SOCKETIO: websocket:9000
UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
UPSTREAM_REAL_IP_RECURSIVE: “off”
PROXY_READ_TIMEOUT: 120
CLIENT_MAX_BODY_SIZE: 50m
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
ports:
- “8080:8080”

queue-long:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
deploy:
restart_policy:
condition: on-failure
command:
- bench
- worker
- --queue
- long,default,short
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
environment:
FRAPPE_REDIS_CACHE: redis://redis-cache:6379
FRAPPE_REDIS_QUEUE: redis://redis-queue:6379

queue-short:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
deploy:
restart_policy:
condition: on-failure
command:
- bench
- worker
- --queue
- short,default
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
environment:
FRAPPE_REDIS_CACHE: redis://redis-cache:6379
FRAPPE_REDIS_QUEUE: redis://redis-queue:6379

redis-queue:
image: crpi-yapdvlijt6tz8auk.cn-chengdu.personal.cr.aliyuncs.com/sclifei/redis:6.2-alpine
networks:
- frappe_network
deploy:
restart_policy:
condition: on-failure
volumes:
- redis-queue-data:/data

redis-cache:
image: crpi-yapdvlijt6tz8auk.cn-chengdu.personal.cr.aliyuncs.com/sclifei/redis:6.2-alpine
networks:
- frappe_network
deploy:
restart_policy:
condition: on-failure

scheduler:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
deploy:
restart_policy:
condition: on-failure
command:
- bench
- schedule
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs

websocket:
image: knimer/erpnext:v15.20260123
networks:
- frappe_network
deploy:
restart_policy:
condition: on-failure
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
environment:
FRAPPE_REDIS_CACHE: redis://redis-cache:6379
FRAPPE_REDIS_QUEUE: redis://redis-queue:6379
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs

volumes:
db-data:
redis-queue-data:
sites:
logs:

networks:
frappe_network:
driver: bridge

It won’t run and keeps throwing errors.

Share the output of your docker compose up command.

Also, run:
docker compose logs -f <problematic container>

Share output here.

<problematic container> = service name in docker compose file that is throwing errors.

Hi @knimer ! Thank you for this excellent image. Would it be possible to share a full Docker Compose file for Swarm? I want to help promote this and support the community’s growth.

Can you please explain how do i deploy it on dokploy and how can i add an additional app? Thank you