Frappe CRM docker compose is not working

Hello everyone,

When I start up FrappeCRM with docker compose Im getting the error message below:

warning " > @tiptap/extension-paragraph@2.26.1" has unmet peer dependency “@tiptap/core@^2.7.0”.
warning " > vite-plugin-pwa@0.15.2" has unmet peer dependency “workbox-build@^6.5.4”.
warning " > vite-plugin-pwa@0.15.2" has unmet peer dependency “workbox-window@^6.5.4”.
[4/4] Building fresh packages…
Done in 61.54s.
Done in 62.24s.
Found existing apps updating states…
$ bench build --app crm
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
ERROR: bench build --app crm
subprocess.CalledProcessError: Command ‘bench build --app crm’ returned non-zero exit status 1.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File “/home/frappe/.local/bin/bench”, line 7, in
sys.exit(cli())
~~~^^
File “/home/frappe/.bench/bench/cli.py”, line 132, in cli
bench_command()
~~~~~~~~~~~~~^^
File “/home/frappe/.bench/bench/commands/make.py”, line 181, in get_app

get_app(

~~~~~~~^
git_url,
^^^^^^^^
…<7 lines>…
compress_artifacts=compress_artifacts,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File “/home/frappe/.bench/bench/app.py”, line 787, in get_app
app.install(verbose=verbose, skip_assets=skip_assets, restart_bench=restart_bench)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/.bench/bench/utils/render.py”, line 126, in wrapper_fn
return fn(*args, **kwargs)
File “/home/frappe/.bench/bench/app.py”, line 254, in install
install_app(
~~~~~~~~~~~^
app=app_name,
^^^^^^^^^^^^^
…<6 lines>…
using_cached=using_cached,
^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File “/home/frappe/.bench/bench/app.py”, line 968, in install_app
build_assets(bench_path=bench_path, app=app, using_cached=using_cached)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/.bench/bench/utils/bench.py”, line 405, in build_assets
exec_cmd(command, cwd=bench_path, env=env)
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/.bench/bench/utils/init.py”, line 193, in exec_cmd
raise CommandFailedError(cmd) from subprocess.CalledProcessError(return_code, cmd)
bench.exceptions.CommandFailedError: bench build --app crm
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
15:44:50 system | web.1 started (pid=339)
15:44:50 system | schedule.1 started (pid=344)
15:44:50 system | socketio.1 started (pid=343)
15:44:50 system | worker.1 started (pid=350)
15:44:50 socketio.1 | node:internal/modules/cjs/loader:1424
15:44:50 socketio.1 | throw err;
15:44:50 socketio.1 | ^
15:44:50 socketio.1 |
15:44:50 socketio.1 | Error: Cannot find module ‘socket.io
15:44:50 socketio.1 | Require stack:
15:44:50 socketio.1 | - /home/frappe/frappe-bench/apps/frappe/realtime/index.js
15:44:50 socketio.1 | - /home/frappe/frappe-bench/apps/frappe/socketio.js
15:44:50 socketio.1 | at Module._resolveFilename (node:internal/modules/cjs/loader:1421:15)
15:44:50 socketio.1 | at defaultResolveImpl (node:internal/modules/cjs/loader:1059:19)
15:44:50 socketio.1 | at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1064:22)
15:44:50 socketio.1 | at Module._load (node:internal/modules/cjs/loader:1227:37)
15:44:50 socketio.1 | at TracingChannel.traceSync (node:diagnostics_channel:328:14)
15:44:50 socketio.1 | at wrapModuleLoad (node:internal/modules/cjs/loader:245:24)
15:44:50 socketio.1 | at Module.require (node:internal/modules/cjs/loader:1504:12)
15:44:50 socketio.1 | at require (node:internal/modules/helpers:152:16)
15:44:50 socketio.1 | at Object. (/home/frappe/frappe-bench/apps/frappe/realtime/index.js:1:20)
15:44:50 socketio.1 | at Module._compile (node:internal/modules/cjs/loader:1761:14) {
15:44:50 socketio.1 | code: ‘MODULE_NOT_FOUND’,
15:44:50 socketio.1 | requireStack: [
15:44:50 socketio.1 | ‘/home/frappe/frappe-bench/apps/frappe/realtime/index.js’,
15:44:50 socketio.1 | ‘/home/frappe/frappe-bench/apps/frappe/socketio.js’
15:44:50 socketio.1 | ]
15:44:50 socketio.1 | }
15:44:50 socketio.1 |
15:44:50 socketio.1 | Node.js v24.12.0
15:44:50 system | socketio.1 stopped (rc=1)
15:44:50 system | sending SIGTERM to web.1 (pid 339)
15:44:50 system | sending SIGTERM to schedule.1 (pid 344)
15:44:50 system | sending SIGTERM to worker.1 (pid 350)
15:44:50 system | worker.1 stopped (rc=-15)
15:44:50 system | web.1 stopped (rc=-15)
15:44:50 system | schedule.1 stopped (rc=-15)

Here is the yml file that Im using:

version: “3.7”

services:
mariadb:
networks:

  • frappe_network
    image: mariadb:10.8
    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: 123
    volumes:
  • mariadb-data:/var/lib/mysql

redis:
networks:

  • frappe_network
    image: redis:alpine

frappe:
networks:

  • traefik_proxy
  • frappe_network
    image: frappe/bench:latest
    command: bash /workspace/init.sh
    environment:
  • SHELL=/bin/bash
    working_dir: /home/frappe
    volumes:
  • /common/ourfrappecrm:/workspace
    ports:
  • 8000:8000
  • 9000:9000

volumes:
mariadb-data:

networks:
traefik_proxy:
external: true
name: traefik_traefik_proxy
frappe_network:
driver: overlay
name: frappe_frappe_network

Can someone help me?

Your Docker Compose is difficult to read because you haven’t written it in a code block. The best way to do this is to use Markdown
```
Your code or yaml files
```

This looks then like this and is easier to read

version: "3.7"
name: crm
services:
  mariadb:
[...]

But back to your problem aree you using the Docker Compose and init.sh from the repo with the main branch for version 15?

I’m using this link: frappe/crm: Fully featured, open source CRM
I’m using docker swarm and I have the compose file below:

My compose file:

```
version: “3.7”

services:
mariadb:
networks:

  • private
    image: mariadb:10.8
    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: 123

redis:
networks:

  • private
    image: redis:alpine

frappe:
networks:

  • traefik_proxy
  • private
    image: frappe/bench:latest
    command: bash /workspace/init.sh
    environment:
  • SHELL=/bin/bash
    working_dir: /home/frappe
    volumes:
  • /common/ourfrappecrm/workspace:/workspace
    #ports:

- 8080:8000

- 9000:9000

labels:

  • “traefik.enable=true”
  • “traefik.docker.network=traefik_traefik_proxy”

Routers

  • “traefik.http.routers.frappecrmfrappecrm.rule=Host(fra.something.com)”
  • “traefik.http.routers.frappecrm.entrypoints=websecure”
  • “traefik.http.routers.frappecrm.service=frappecrm-svc”
  • “traefik.http.routers.frappecrm.tls.certresolver=cloudflare”

Services

  • “traefik.http.services.frappecrm-svc.loadbalancer.server.port=8000”
  • “traefik.http.services.frappecrm-svc.loadbalancer.server.scheme=http”
  • “traefik.http.services.frappecrm-svc.loadbalancer.healthcheck.interval=10s”
  • “traefik.http.services.frappecrm-svc.loadbalancer.healthcheck.timeout=5s”

networks:
traefik_proxy:
external: true
name: traefik_traefik_proxy
private:
driver: overlay
```

The error message that I’m getting in the container:

```
warning " > @tiptap/extension-paragraph@2.26.1" has unmet peer dependency “@tiptap/core@^2.7.0”.
warning " > vite-plugin-pwa@0.15.2" has unmet peer dependency “workbox-build@^6.5.4”.
warning " > vite-plugin-pwa@0.15.2" has unmet peer dependency “workbox-window@^6.5.4”.
[4/4] Building fresh packages…
Done in 33.85s.
Done in 34.55s.
Found existing apps updating states…
$ bench build --app crm
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
ERROR: bench build --app crm
subprocess.CalledProcessError: Command ‘bench build --app crm’ returned non-zero exit status 1.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File “/home/frappe/.local/bin/bench”, line 7, in
sys.exit(cli())
~~~^^
File “/home/frappe/.bench/bench/cli.py”, line 132, in cli
bench_command()
~~~~~~~~~~~~~^^
File “/home/frappe/.bench/bench/commands/make.py”, line 181, in get_app

get_app(

~~~~~~~^
git_url,
^^^^^^^^
…<7 lines>…
compress_artifacts=compress_artifacts,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File “/home/frappe/.bench/bench/app.py”, line 787, in get_app
app.install(verbose=verbose, skip_assets=skip_assets, restart_bench=restart_bench)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/.bench/bench/utils/render.py”, line 126, in wrapper_fn
return fn(*args, **kwargs)
File “/home/frappe/.bench/bench/app.py”, line 254, in install
install_app(
~~~~~~~~~~~^
app=app_name,
^^^^^^^^^^^^^
…<6 lines>…
using_cached=using_cached,
^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File “/home/frappe/.bench/bench/app.py”, line 968, in install_app
build_assets(bench_path=bench_path, app=app, using_cached=using_cached)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/.bench/bench/utils/bench.py”, line 405, in build_assets
exec_cmd(command, cwd=bench_path, env=env)
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/.bench/bench/utils/init.py”, line 193, in exec_cmd
raise CommandFailedError(cmd) from subprocess.CalledProcessError(return_code, cmd)
bench.exceptions.CommandFailedError: bench build --app crm
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
/home/frappe/frappe-bench/env/bin/python: Error while finding module specification for ‘frappe.utils.bench_helper’ (ModuleNotFoundError: No module named ‘frappe’)
09:24:26 system | web.1 started (pid=316)
09:24:26 system | worker.1 started (pid=319)
09:24:26 system | schedule.1 started (pid=320)
09:24:26 system | socketio.1 started (pid=324)
09:24:26 socketio.1 | node:internal/modules/cjs/loader:1424
09:24:26 socketio.1 | throw err;
09:24:26 socketio.1 | ^
09:24:26 socketio.1 |
09:24:26 socketio.1 | Error: Cannot find module ‘socket.io
09:24:26 socketio.1 | Require stack:
09:24:26 socketio.1 | - /home/frappe/frappe-bench/apps/frappe/realtime/index.js
09:24:26 socketio.1 | - /home/frappe/frappe-bench/apps/frappe/socketio.js
09:24:26 socketio.1 | at Module._resolveFilename (node:internal/modules/cjs/loader:1421:15)
09:24:26 socketio.1 | at defaultResolveImpl (node:internal/modules/cjs/loader:1059:19)
09:24:26 socketio.1 | at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1064:22)
09:24:26 socketio.1 | at Module._load (node:internal/modules/cjs/loader:1227:37)
09:24:26 socketio.1 | at TracingChannel.traceSync (node:diagnostics_channel:328:14)
09:24:26 socketio.1 | at wrapModuleLoad (node:internal/modules/cjs/loader:245:24)
09:24:26 socketio.1 | at Module.require (node:internal/modules/cjs/loader:1504:12)
09:24:26 socketio.1 | at require (node:internal/modules/helpers:152:16)
09:24:26 socketio.1 | at Object. (/home/frappe/frappe-bench/apps/frappe/realtime/index.js:1:20)
09:24:26 socketio.1 | at Module._compile (node:internal/modules/cjs/loader:1761:14) {
09:24:26 socketio.1 | code: ‘MODULE_NOT_FOUND’,
09:24:26 socketio.1 | requireStack: [
09:24:26 socketio.1 | ‘/home/frappe/frappe-bench/apps/frappe/realtime/index.js’,
09:24:26 socketio.1 | ‘/home/frappe/frappe-bench/apps/frappe/socketio.js’
09:24:26 socketio.1 | ]
09:24:26 socketio.1 | }
09:24:26 socketio.1 |
09:24:26 socketio.1 | Node.js v24.12.0
09:24:26 system | socketio.1 stopped (rc=1)
09:24:26 system | sending SIGTERM to web.1 (pid 316)
09:24:26 system | sending SIGTERM to schedule.1 (pid 320)
09:24:26 system | sending SIGTERM to worker.1 (pid 319)
09:24:26 system | worker.1 stopped (rc=-15)
09:24:26 system | schedule.1 stopped (rc=-15)
09:24:26 system | web.1 stopped (rc=-15)
```

The container keeps failing.