Skip to content

Unable to start docker: it fails on startup #45

@bit111

Description

@bit111

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/prints

And 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:asc

These 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/prints

and 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:asc

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions