Skip to content

[BUG] First run with empty /config, unable to login/register #366

@mcinj

Description

@mcinj

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

On first run of this image I see errors in the logs. The webui loads on the exported port with a login screen, but no way to register. I'm not aware of default credentials.

Expected Behavior

I should be able to register or login on first run.

Steps To Reproduce

Working install of calibre. Empty calibre-web config directory. docker-compose up -d

Environment

- OS: ubuntu 24.04

CPU architecture

x86-64

Docker creation

services:
  calibre:
    image: lscr.io/linuxserver/calibre:latest
    container_name: calibre
    environment:
      - PUID=100
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./docker-calibre/config:/config
    ports:
      - "8080:8080" 
      - "8181:8181"
    restart: unless-stopped

  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./docker-calibre-web/config:/config
      - ./docker-calibre/library:/library:ro
    ports:
      - "8083:8083"
    restart: unless-stopped
    depends_on:
      - calibre

Container logs

calibre-web    | [migrations] started
calibre-web    | [migrations] no migrations found
calibre-web    | ───────────────────────────────────────
calibre-web    | 
calibre-web    |       ██╗     ███████╗██╗ ██████╗
calibre-web    |       ██║     ██╔════╝██║██╔═══██╗
calibre-web    |       ██║     ███████╗██║██║   ██║
calibre-web    |       ██║     ╚════██║██║██║   ██║
calibre-web    |       ███████╗███████║██║╚██████╔╝
calibre-web    |       ╚══════╝╚══════╝╚═╝ ╚═════╝
calibre-web    | 
calibre-web    |    Brought to you by linuxserver.io
calibre-web    | ───────────────────────────────────────
calibre-web    | 
calibre-web    | To support the app dev(s) visit:
calibre-web    | Calibre-Web: https://paypal.me/calibreweb
calibre-web    | 
calibre-web    | To support LSIO projects visit:
calibre-web    | https://www.linuxserver.io/donate/
calibre-web    | 
calibre-web    | ───────────────────────────────────────
calibre-web    | GID/UID
calibre-web    | ───────────────────────────────────────
calibre-web    | 
calibre-web    | User UID:    1000
calibre-web    | User GID:    1000
calibre-web    | ───────────────────────────────────────
calibre-web    | First time run, creating app.db...
calibre-web    | Successfully set kepubify paths in '/config/app.db'!
calibre-web    | [custom-init] No custom files found, skipping...
calibre-web    | [2026-01-20 16:39:45,019]  WARN {warnings.py:110} /lsiopy/lib/python3.12/site-packages/pycountry/__init__.py:10: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
calibre-web    |   import pkg_resources
calibre-web    | 
calibre-web    | Connection to localhost (::1) 8083 port [tcp/*] succeeded!
calibre-web    | [ls.io-init] done.
calibre-web    | Traceback (most recent call last):
calibre-web    |   File "src/gevent/greenlet.py", line 900, in gevent._gevent_cgreenlet.Greenlet.run
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/baseserver.py", line 34, in _handle_and_close_when_done
calibre-web    |     return handle(*args_tuple)
calibre-web    |            ^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1700, in handle
calibre-web    |     handler.handle()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 584, in handle
calibre-web    |     self.log_request()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1016, in log_request
calibre-web    |     self.server.log.write(self.format_request() + '\n')
calibre-web    |                           ^^^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/app/calibre-web/cps/gevent_wsgi.py", line 37, in format_request
calibre-web    |     forwarded = self.environ.get('HTTP_X_FORWARDED_FOR', None)
calibre-web    |                 ^^^^^^^^^^^^^^^^
calibre-web    | AttributeError: 'NoneType' object has no attribute 'get'
calibre-web    | 2026-01-20T21:40:48Z <Greenlet at 0x7dae2eb6d580: _handle_and_close_when_done(<bound method WSGIServer.handle of <WSGIServer at , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed] at 0x7dae2f73836)> failed with AttributeError
calibre-web    | 
calibre-web    | Traceback (most recent call last):
calibre-web    |   File "src/gevent/greenlet.py", line 900, in gevent._gevent_cgreenlet.Greenlet.run
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/baseserver.py", line 34, in _handle_and_close_when_done
calibre-web    |     return handle(*args_tuple)
calibre-web    |            ^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1700, in handle
calibre-web    |     handler.handle()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 584, in handle
calibre-web    |     self.log_request()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1016, in log_request
calibre-web    |     self.server.log.write(self.format_request() + '\n')
calibre-web    |                           ^^^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/app/calibre-web/cps/gevent_wsgi.py", line 37, in format_request
calibre-web    |     forwarded = self.environ.get('HTTP_X_FORWARDED_FOR', None)
calibre-web    |                 ^^^^^^^^^^^^^^^^
calibre-web    | AttributeError: 'NoneType' object has no attribute 'get'
calibre-web    | 2026-01-20T21:40:48Z <Greenlet at 0x7dae2eb6d580: _handle_and_close_when_done(<bound method WSGIServer.handle of <WSGIServer at , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed] at 0x7dae2f73844)> failed with AttributeError
calibre-web    | 
calibre-web    | Traceback (most recent call last):
calibre-web    |   File "src/gevent/greenlet.py", line 900, in gevent._gevent_cgreenlet.Greenlet.run
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/baseserver.py", line 34, in _handle_and_close_when_done
calibre-web    |     return handle(*args_tuple)
calibre-web    |            ^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1700, in handle
calibre-web    |     handler.handle()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 584, in handle
calibre-web    |     self.log_request()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1016, in log_request
calibre-web    |     self.server.log.write(self.format_request() + '\n')
calibre-web    |                           ^^^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/app/calibre-web/cps/gevent_wsgi.py", line 37, in format_request
calibre-web    |     forwarded = self.environ.get('HTTP_X_FORWARDED_FOR', None)
calibre-web    |                 ^^^^^^^^^^^^^^^^
calibre-web    | AttributeError: 'NoneType' object has no attribute 'get'
calibre-web    | 2026-01-20T21:40:48Z <Greenlet at 0x7dae2eb6d580: _handle_and_close_when_done(<bound method WSGIServer.handle of <WSGIServer at , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed] at 0x7dae2f73836)> failed with AttributeError
calibre-web    | 
calibre-web    | Traceback (most recent call last):
calibre-web    |   File "src/gevent/greenlet.py", line 900, in gevent._gevent_cgreenlet.Greenlet.run
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/baseserver.py", line 34, in _handle_and_close_when_done
calibre-web    |     return handle(*args_tuple)
calibre-web    |            ^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1700, in handle
calibre-web    |     handler.handle()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 584, in handle
calibre-web    |     self.log_request()
calibre-web    |   File "/lsiopy/lib/python3.12/site-packages/gevent/pywsgi.py", line 1016, in log_request
calibre-web    |     self.server.log.write(self.format_request() + '\n')
calibre-web    |                           ^^^^^^^^^^^^^^^^^^^^^
calibre-web    |   File "/app/calibre-web/cps/gevent_wsgi.py", line 37, in format_request
calibre-web    |     forwarded = self.environ.get('HTTP_X_FORWARDED_FOR', None)
calibre-web    |                 ^^^^^^^^^^^^^^^^
calibre-web    | AttributeError: 'NoneType' object has no attribute 'get'
calibre-web    | 2026-01-20T21:40:48Z <Greenlet at 0x7dae2eb6d580: _handle_and_close_when_done(<bound method WSGIServer.handle of <WSGIServer at , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed] at 0x7dae2f73844)> failed with AttributeError
calibre-web    |

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions