-
Notifications
You must be signed in to change notification settings - Fork 22
Open
Description
Hi,
I am trying to start OpenSpoolman via docker compose on a Debian machine (the same server on which Spollman runs), but it fails on startup.
This is my docker-compose.yml file:
services:
openspoolman:
#depends_on:
# - spoolman
#build: .
image: ghcr.io/drndos/openspoolman:latest
env_file: "openspoolman_config.env"
ports:
- "8001:8000"
volumes:
- ./openspoolman_data/logs:/home/app/logs
- ./openspoolman_data/data:/home/app/data
- ./openspoolman_data/prints:/home/app/static/printsAnd this is the openspoolman_config.env:
TZ=Europe/Berlin
OPENSPOOLMAN_BASE_URL=http://192.168.5.14:8001
PRINTER_ACCESS_CODE=xxxxxxxx
PRINTER_ID=yyyyyyyyyyyy
PRINTER_IP=192.168.5.10
PRINTER_NAME=A1
SPOOLMAN_BASE_URL=http://192.168.5.14:7912/
AUTO_SPEND=True
SPOOL_SORTING=filament.material:asc,filament.vendor.name:asc,filament.name:ascThese are the errors on startup:
✔ Container spoolman-openspoolman-1 Started 0.2s
openspoolman-1 | [2025-07-25 17:19:57 +0200] [1] [INFO] Starting gunicorn 23.0.0
openspoolman-1 | [2025-07-25 17:19:57 +0200] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
openspoolman-1 | [2025-07-25 17:19:57 +0200] [1] [INFO] Using worker: gthread
openspoolman-1 | [2025-07-25 17:19:57 +0200] [8] [INFO] Booting worker with pid: 8
openspoolman-1 | [2025-07-25 17:19:57 +0200] [8] [ERROR] Exception in worker process
openspoolman-1 | Traceback (most recent call last):
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/arbiter.py", line 608, in spawn_worker
openspoolman-1 | worker.init_process()
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/workers/gthread.py", line 94, in init_process
openspoolman-1 | super().init_process()
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/workers/base.py", line 135, in init_process
openspoolman-1 | self.load_wsgi()
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/workers/base.py", line 147, in load_wsgi
openspoolman-1 | self.wsgi = self.app.wsgi()
openspoolman-1 | ^^^^^^^^^^^^^^^
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/app/base.py", line 66, in wsgi
openspoolman-1 | self.callable = self.load()
openspoolman-1 | ^^^^^^^^^^^
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/app/wsgiapp.py", line 57, in load
openspoolman-1 | return self.load_wsgiapp()
openspoolman-1 | ^^^^^^^^^^^^^^^^^^^
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsgiapp
openspoolman-1 | return util.import_app(self.app_uri)
openspoolman-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openspoolman-1 | File "/home/app/venv/lib/python3.12/site-packages/gunicorn/util.py", line 370, in import_app
openspoolman-1 | mod = importlib.import_module(module)
openspoolman-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openspoolman-1 | File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
openspoolman-1 | return _bootstrap._gcd_import(name[level:], package, level)
openspoolman-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openspoolman-1 | File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
openspoolman-1 | File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
openspoolman-1 | File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
openspoolman-1 | File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
openspoolman-1 | File "<frozen importlib._bootstrap_external>", line 999, in exec_module
openspoolman-1 | File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
openspoolman-1 | File "/home/app/app.py", line 11, in <module>
openspoolman-1 | from mqtt_bambulab import fetchSpools, getLastAMSConfig, publish, getMqttClient, setActiveTray, isMqttClientConnected, init_mqtt, getPrinterModel
openspoolman-1 | File "/home/app/mqtt_bambulab.py", line 10, in <module>
openspoolman-1 | from spoolman_service import spendFilaments, setActiveTray, fetchSpools
openspoolman-1 | File "/home/app/spoolman_service.py", line 5, in <module>
openspoolman-1 | from print_history import update_filament_spool
openspoolman-1 | File "/home/app/print_history.py", line 150, in <module>
openspoolman-1 | create_database()
openspoolman-1 | File "/home/app/print_history.py", line 15, in create_database
openspoolman-1 | conn = sqlite3.connect(db_config["db_path"])
openspoolman-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openspoolman-1 | sqlite3.OperationalError: unable to open database file
openspoolman-1 | [2025-07-25 17:19:57 +0200] [8] [INFO] Worker exiting (pid: 8)
openspoolman-1 | [2025-07-25 17:19:58 +0200] [1] [ERROR] Worker (pid:8) exited with code 3
openspoolman-1 | [2025-07-25 17:19:58 +0200] [1] [ERROR] Shutting down: Master
openspoolman-1 | [2025-07-25 17:19:58 +0200] [1] [ERROR] Reason: Worker failed to boot.
openspoolman-1 exited with code 3
EDIT:
I also tried to map both services in the same docker-compose.yml but without success:
services:
spoolman:
image: ghcr.io/donkie/spoolman:latest
container_name: spoolman
restart: unless-stopped
volumes:
# Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory
- "./spoolman_data:/home/app/.local/share/spoolman"
ports:
# Map the host machine's port 7912 to the container's port 8000
- "7912:8000"
environment:
- TZ=Europe/Berlin # Optional, defaults to UTC
openspoolman:
container_name: openspoolman
depends_on:
- spoolman
#build: .
image: ghcr.io/drndos/openspoolman:latest
env_file: "openspoolman_config.env"
ports:
- "8001:8001"
volumes:
- ./openspoolman_data/logs:/home/app/logs
- ./openspoolman_data/data:/home/app/data
- ./openspoolman_data/prints:/home/app/static/printsand this is the updated .env file:
TZ=Europe/Berlin
OPENSPOOLMAN_BASE_URL=http://openspoolman:8001
PRINTER_ACCESS_CODE=xxxxxxxx
PRINTER_ID=yyyyyyyyyyyy
PRINTER_IP=192.168.5.10
PRINTER_NAME=A1
SPOOLMAN_BASE_URL=http://spoolman:7912/
AUTO_SPEND=True
SPOOL_SORTING=filament.material:asc,filament.vendor.name:asc,filament.name:ascReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels