audiobookshelf icon indicating copy to clipboard operation
audiobookshelf copied to clipboard

[Bug]: MODULE_NOT_FOUND error in Docker, crashing on startup

Open dima-ser opened this issue 6 months ago • 24 comments

What happened?

Updated to latest docker image. Container crashing after startup. See logs below

What did you expect to happen?

I expected it to not crash

Steps to reproduce the issue

  1. Start up the docker container
  2. Watch docker container crash

Audiobookshelf version

2.23.0

How are you running audiobookshelf?

Docker

What OS is your Audiobookshelf server hosted from?

Linux

If the issue is being seen in the UI, what browsers are you seeing the problem on?

None

Logs

node:internal/modules/cjs/loader:1215
    at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
  code: 'MODULE_NOT_FOUND',
  ^
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
}
  throw err;
    at Module._load (node:internal/modules/cjs/loader:1043:27)
  requireStack: []
Error: Cannot find module '/index.js'
    at node:internal/main/run_main_module:28:49 {
Node.js v20.19.2

Additional Notes

Running on Synology

dima-ser avatar May 18 '25 16:05 dima-ser

Duplicate of https://github.com/advplyr/audiobookshelf/issues/4292

Check that thread for answers. tl;dr - this is a synology issue.

DieselTech avatar May 18 '25 16:05 DieselTech

Thanks, I did a "Clean" on the project, rebuilt it and now it works. Not sure why.

dima-ser avatar May 18 '25 16:05 dima-ser

Thanks, I did a "Clean" on the project, rebuilt it and now it works. Not sure why.

It works because synology does really weird stuff on their own that isn't part of docker. They were caching environment variables and other parts of the image that shouldn't be cached. Forcing it to create a new container gets around that problem.

DieselTech avatar May 18 '25 16:05 DieselTech

Im experiencing the same issue on Debian running on normal baremetal server, defo nothing to do with Synology. Here is my docker-compose:

services:
  audiobookshelf:
    user: "${MEDIA_PUID}:${MEDIA_PGID}"
    cap_add:
      - AUDIT_WRITE
      - CHOWN
      - DAC_OVERRIDE
      - FOWNER
      - FSETID
      - KILL
      - MKNOD
      - NET_BIND_SERVICE
      - NET_RAW
      - SETFCAP
      - SETGID
      - SETPCAP
      - SETUID
      - SYS_CHROOT
    cap_drop:
      - ALL
    container_name: audiobookshelf
    hostname: audiobookshelf
    image: advplyr/audiobookshelf:latest
    ipc: private
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    networks:
      - audiobookshelf
      - traefik
    ports:
      - 3378:80/tcp
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.audiobookshelf.rule=Host(`audiobooks.${DOMAIN_NAME}`)"
      - "traefik.http.routers.audiobookshelf.entrypoints=websecure"
      - "traefik.http.routers.audiobookshelf.tls=true"
      - "traefik.http.routers.audiobookshelf.tls.certresolver=letsencrypt"
      - "traefik.http.services.audiobookshelf.loadbalancer.server.port=80"
    volumes:
      - /Data/Ebooks/Audiobooks:/audiobooks:ro
      - /opt/docker/audiobookshelf/audiobookshelf_config:/config
      - /opt/docker/audiobookshelf/audiobookshelf_metadata:/metadata
      - /Data/Ebooks/Podcasts:/podcasts:ro
    working_dir: /
networks:
  audiobookshelf:
    name: audiobookshelf
    driver: bridge
    external: false
  traefik:
    name: traefik
    external: true

And the log repeadly shows:

audiobookshelf  | 2025-05-18T20:16:19.902865872Z Error: Cannot find module '/index.js'
audiobookshelf  | 2025-05-18T20:16:19.902871958Z     at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
audiobookshelf  | 2025-05-18T20:16:19.902891324Z     at Module._load (node:internal/modules/cjs/loader:1043:27)
audiobookshelf  | 2025-05-18T20:16:19.902896265Z     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
audiobookshelf  | 2025-05-18T20:16:19.902900237Z     at node:internal/main/run_main_module:28:49 {
audiobookshelf  | 2025-05-18T20:16:19.902904229Z   code: 'MODULE_NOT_FOUND',
audiobookshelf  | 2025-05-18T20:16:19.902907836Z   requireStack: []
audiobookshelf  | 2025-05-18T20:16:19.902911254Z }
audiobookshelf  | 2025-05-18T20:16:19.902914557Z 
audiobookshelf  | 2025-05-18T20:16:19.902917876Z Node.js v20.19.2
audiobookshelf  | 2025-05-18T20:17:20.339930382Z node:internal/modules/cjs/loader:1215
audiobookshelf  | 2025-05-18T20:17:20.339990002Z   throw err;
audiobookshelf  | 2025-05-18T20:17:20.340003612Z   ^
audiobookshelf  | 2025-05-18T20:17:20.340014340Z 
audiobookshelf  | 2025-05-18T20:17:20.340024516Z Error: Cannot find module '/index.js'
audiobookshelf  | 2025-05-18T20:17:20.340034197Z     at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
audiobookshelf  | 2025-05-18T20:17:20.340043793Z     at Module._load (node:internal/modules/cjs/loader:1043:27)
audiobookshelf  | 2025-05-18T20:17:20.340053408Z     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
audiobookshelf  | 2025-05-18T20:17:20.340063393Z     at node:internal/main/run_main_module:28:49 {
audiobookshelf  | 2025-05-18T20:17:20.340073540Z   code: 'MODULE_NOT_FOUND',
audiobookshelf  | 2025-05-18T20:17:20.340082593Z   requireStack: []
audiobookshelf  | 2025-05-18T20:17:20.340091925Z }
audiobookshelf  | 2025-05-18T20:17:20.340100837Z 
audiobookshelf  | 2025-05-18T20:17:20.340109179Z Node.js v20.19.2

it was working fine until an update a few days ago (maybe up to two weeks ago). Completely destroying the stack and redeploying the compose file still doesnt work

Dinth avatar May 18 '25 20:05 Dinth

Make sure you have fully removed the existing container and image, then pull the image again. It affects more than just Synology, but Synology has been the worst offender.

nichwall avatar May 18 '25 20:05 nichwall

I have destroyed the stack, removed all the images:

root@r720-omv:~# docker image ls | grep audi
advplyr/audiobookshelf                                   <none>             574f51737c44   3 days ago      311MB
root@r720-omv:~# docker image rm 574f51737c44
Untagged: advplyr/audiobookshelf@sha256:af827f25120c7a76c5b20bfb34f230353d44920ef7c55a9d7f3ae2aac9c51c94
Deleted: sha256:574f51737c448d1cf504652eaa3a624bf73dd193b58d0215063fa3d3c67c067f
Deleted: sha256:022b664b178dce955ebd1dba8a03931cdcef075e16773da5706bbb11dfbdc62b
Deleted: sha256:83041c90ffcd11d856ea47ee6f9ea73c44e5669bbeaad442472668b6f80fbded
Deleted: sha256:ca2a3272c60bf05b4417da52e1847efb84201a7d4a7cf7faeeea79a7eee78d2f
Deleted: sha256:d82669709339276e226b544245608db70b2df5b314fc59a5e58546ce47fd0196
Deleted: sha256:ca3247ef875e38859fdd067bcc1d2c20785911b9000acb4401cf2ee3176640c3
Deleted: sha256:c205df0c3153177146b7bb9044aef7edcccce2d7b749e1fc7f510a1d7bec6a66
Deleted: sha256:b30b2aaa3cdc94ca87a908b0ee813635d90646a2ff9b39bf2d3345b709516386
root@r720-omv:~# docker image ls | grep audi
root@r720-omv:~#

and redeployed compose file, but still doesnt help. I have also tried adding ghcr.io/ prefix to the container address

Dinth avatar May 18 '25 21:05 Dinth

Just had this happen to me.

Recreating the stack fixed it.

pax0707 avatar May 18 '25 21:05 pax0707

I have destroyed the stack, removed all the images:

root@r720-omv:~# docker image ls | grep audi
advplyr/audiobookshelf                                   <none>             574f51737c44   3 days ago      311MB
root@r720-omv:~# docker image rm 574f51737c44
Untagged: advplyr/audiobookshelf@sha256:af827f25120c7a76c5b20bfb34f230353d44920ef7c55a9d7f3ae2aac9c51c94
Deleted: sha256:574f51737c448d1cf504652eaa3a624bf73dd193b58d0215063fa3d3c67c067f
Deleted: sha256:022b664b178dce955ebd1dba8a03931cdcef075e16773da5706bbb11dfbdc62b
Deleted: sha256:83041c90ffcd11d856ea47ee6f9ea73c44e5669bbeaad442472668b6f80fbded
Deleted: sha256:ca2a3272c60bf05b4417da52e1847efb84201a7d4a7cf7faeeea79a7eee78d2f
Deleted: sha256:d82669709339276e226b544245608db70b2df5b314fc59a5e58546ce47fd0196
Deleted: sha256:ca3247ef875e38859fdd067bcc1d2c20785911b9000acb4401cf2ee3176640c3
Deleted: sha256:c205df0c3153177146b7bb9044aef7edcccce2d7b749e1fc7f510a1d7bec6a66
Deleted: sha256:b30b2aaa3cdc94ca87a908b0ee813635d90646a2ff9b39bf2d3345b709516386
root@r720-omv:~# docker image ls | grep audi
root@r720-omv:~#

and redeployed compose file, but still doesnt help. I have also tried adding ghcr.io/ prefix to the container address

What about docker ps -a? Those are just the images

nichwall avatar May 18 '25 22:05 nichwall

same thing, ive been deleting container on each attempt

bdc2b38b3323   ghcr.io/advplyr/audiobookshelf:latest                           "tini -- node index.…"   8 hours ago    Exited (1) About a minute ago                                                                                                                                                                                                      audiobookshelf
root@r720-omv:~# docker container rm bdc2b38b3323
bdc2b38b3323
root@r720-omv:~# docker ps -a | grep audio
root@r720-omv:~# 

docker inspect:

root@r720-omv:~# docker inspect audiobookshelf
[
    {
        "Id": "44323da0ef06acc5f0af45f92a37b3266b27fb5d199e5f3c7694665037e3d3b1",
        "Created": "2025-05-19T04:37:15.544463035Z",
        "Path": "tini",
        "Args": [
            "--",
            "node",
            "index.js"
        ],
        "State": {
            "Status": "restarting",
            "Running": true,
            "Paused": false,
            "Restarting": true,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 1,
            "Error": "",
            "StartedAt": "2025-05-19T04:38:18.844537433Z",
            "FinishedAt": "2025-05-19T04:38:21.217159852Z"
        },
        "Image": "sha256:9958782bff325541baaa94097e03cc59ac3c2530b7af349ee23e08c4448ccd5b",
        "ResolvConfPath": "/var/lib/docker/containers/44323da0ef06acc5f0af45f92a37b3266b27fb5d199e5f3c7694665037e3d3b1/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/44323da0ef06acc5f0af45f92a37b3266b27fb5d199e5f3c7694665037e3d3b1/hostname",
        "HostsPath": "/var/lib/docker/containers/44323da0ef06acc5f0af45f92a37b3266b27fb5d199e5f3c7694665037e3d3b1/hosts",
        "LogPath": "/var/lib/docker/containers/44323da0ef06acc5f0af45f92a37b3266b27fb5d199e5f3c7694665037e3d3b1/44323da0ef06acc5f0af45f92a37b3266b27fb5d199e5f3c7694665037e3d3b1-json.log",
        "Name": "/audiobookshelf",
        "RestartCount": 10,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/Data/Ebooks/Audiobooks:/audiobooks:ro",
                "/opt/docker/audiobookshelf/audiobookshelf_config:/config:rw",
                "/opt/docker/audiobookshelf/audiobookshelf_metadata:/metadata:rw",
                "/Data/Ebooks/Podcasts:/podcasts:ro"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-file": "3",
                    "max-size": "10m"
                }
            },
            "NetworkMode": "audiobookshelf",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "3378"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "unless-stopped",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                0,
                0
            ],
            "CapAdd": [
                "CAP_AUDIT_WRITE",
                "CAP_CHOWN",
                "CAP_DAC_OVERRIDE",
                "CAP_FOWNER",
                "CAP_FSETID",
                "CAP_KILL",
                "CAP_MKNOD",
                "CAP_NET_BIND_SERVICE",
                "CAP_NET_RAW",
                "CAP_SETFCAP",
                "CAP_SETGID",
                "CAP_SETPCAP",
                "CAP_SETUID",
                "CAP_SYS_CHROOT"
            ],
            "CapDrop": [
                "ALL"
            ],
            "CgroupnsMode": "host",
            "Dns": null,
            "DnsOptions": null,
            "DnsSearch": null,
            "ExtraHosts": [],
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": null,
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/interrupts",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware",
                "/sys/devices/virtual/powercap",
                "/sys/devices/system/cpu/cpu0/thermal_throttle",
                "/sys/devices/system/cpu/cpu1/thermal_throttle",
                "/sys/devices/system/cpu/cpu2/thermal_throttle",
                "/sys/devices/system/cpu/cpu3/thermal_throttle",
                "/sys/devices/system/cpu/cpu4/thermal_throttle",
                "/sys/devices/system/cpu/cpu5/thermal_throttle",
                "/sys/devices/system/cpu/cpu6/thermal_throttle",
                "/sys/devices/system/cpu/cpu7/thermal_throttle",
                "/sys/devices/system/cpu/cpu8/thermal_throttle",
                "/sys/devices/system/cpu/cpu9/thermal_throttle",
                "/sys/devices/system/cpu/cpu10/thermal_throttle",
                "/sys/devices/system/cpu/cpu11/thermal_throttle",
                "/sys/devices/system/cpu/cpu12/thermal_throttle",
                "/sys/devices/system/cpu/cpu13/thermal_throttle",
                "/sys/devices/system/cpu/cpu14/thermal_throttle",
                "/sys/devices/system/cpu/cpu15/thermal_throttle",
                "/sys/devices/system/cpu/cpu16/thermal_throttle",
                "/sys/devices/system/cpu/cpu17/thermal_throttle",
                "/sys/devices/system/cpu/cpu18/thermal_throttle",
                "/sys/devices/system/cpu/cpu19/thermal_throttle",
                "/sys/devices/system/cpu/cpu20/thermal_throttle",
                "/sys/devices/system/cpu/cpu21/thermal_throttle",
                "/sys/devices/system/cpu/cpu22/thermal_throttle",
                "/sys/devices/system/cpu/cpu23/thermal_throttle"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "ID": "44323da0ef06acc5f0af45f92a37b3266b27fb5d199e5f3c7694665037e3d3b1",
                "LowerDir": "/var/lib/docker/overlay2/e82ac442d4bb21141fea7a05f272c15e9fa4b4b16b3b1993d14871f8d272252d-init/diff:/var/lib/docker/overlay2/0c4ba39522a1846656c2e97bd8faed437ddd22519838b0012dc4d64d63ccab14/diff:/var/lib/docker/overlay2/d4c02380cd62d0becd6bda2b1dc3ffc5c27442a146d4d90257469aaba073d4cd/diff:/var/lib/docker/overlay2/acc254d782638fb4efc313b75e7c6406fb39f67e609300c3392c54bf4a7c92f0/diff:/var/lib/docker/overlay2/e4db7758216e9a66ead0feda9928a260a6b7ef1fe592b0972c95569a8b566a8e/diff:/var/lib/docker/overlay2/623976f1303e1775fc5c31574a28b7418dc016eb22c17b8c62f870c26b533c8c/diff:/var/lib/docker/overlay2/9c027b84e803ec3d03eceefbb3818f22cfe60c1682e6b0e88da6b6ddb3a88de4/diff:/var/lib/docker/overlay2/8cc530f37c6c87e689dceee7947a142bd21ef367c0a5f0861ee967b63e5d8555/diff:/var/lib/docker/overlay2/7521730cbbe4cf6004908b5d5ab2e375fc9bd2579f37836b2f59feb6f26fd77f/diff:/var/lib/docker/overlay2/e68c0aba89bc1b5a32e3a24289f01e1754c7ddea779ad4ee155698775ca959b6/diff",
                "MergedDir": "/var/lib/docker/overlay2/e82ac442d4bb21141fea7a05f272c15e9fa4b4b16b3b1993d14871f8d272252d/merged",
                "UpperDir": "/var/lib/docker/overlay2/e82ac442d4bb21141fea7a05f272c15e9fa4b4b16b3b1993d14871f8d272252d/diff",
                "WorkDir": "/var/lib/docker/overlay2/e82ac442d4bb21141fea7a05f272c15e9fa4b4b16b3b1993d14871f8d272252d/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/Data/Ebooks/Audiobooks",
                "Destination": "/audiobooks",
                "Mode": "ro",
                "RW": false,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/docker/audiobookshelf/audiobookshelf_config",
                "Destination": "/config",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/docker/audiobookshelf/audiobookshelf_metadata",
                "Destination": "/metadata",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Data/Ebooks/Podcasts",
                "Destination": "/podcasts",
                "Mode": "ro",
                "RW": false,
                "Propagation": "rprivate"
            }
        ],
        "Config": {
            "Hostname": "audiobookshelf",
            "Domainname": "",
            "User": "1001:100",
            "AttachStdin": false,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NODE_VERSION=20.19.2",
                "YARN_VERSION=1.22.22",
                "PORT=80",
                "NODE_ENV=production",
                "CONFIG_PATH=/config",
                "METADATA_PATH=/metadata",
                "SOURCE=docker",
                "NUSQLITE3_DIR=/usr/local/lib/nusqlite3",
                "NUSQLITE3_PATH=/usr/local/lib/nusqlite3/libnusqlite3.so"
            ],
            "Cmd": [
                "node",
                "index.js"
            ],
            "Image": "ghcr.io/advplyr/audiobookshelf:latest",
            "Volumes": null,
            "WorkingDir": "/",
            "Entrypoint": [
                "tini",
                "--"
            ],
            "OnBuild": null,
            "Labels": {
                "com.docker.compose.config-hash": "c0fc502e8a93cac107c44d693b7f8e0460f9394c6bb50644e6ace8c444fe4448",
                "com.docker.compose.container-number": "1",
                "com.docker.compose.depends_on": "",
                "com.docker.compose.image": "sha256:9958782bff325541baaa94097e03cc59ac3c2530b7af349ee23e08c4448ccd5b",
                "com.docker.compose.oneoff": "False",
                "com.docker.compose.project": "audiobookshelf",
                "com.docker.compose.project.config_files": "/etc/komodo/stacks/audiobookshelf/r720-omv/audiobookshelf/compose.yaml",
                "com.docker.compose.project.environment_file": "/etc/komodo/stacks/audiobookshelf/r720-omv/audiobookshelf/.env",
                "com.docker.compose.project.working_dir": "/etc/komodo/stacks/audiobookshelf/r720-omv/audiobookshelf",
                "com.docker.compose.service": "audiobookshelf",
                "com.docker.compose.version": "2.35.1",
                "org.opencontainers.image.created": "2025-05-16T22:07:50.749Z",
                "org.opencontainers.image.description": "Self-hosted audiobook and podcast server",
                "org.opencontainers.image.licenses": "GPL-3.0",
                "org.opencontainers.image.revision": "077273033657da2345494084dc7a1f399cc1a7ba",
                "org.opencontainers.image.source": "https://github.com/advplyr/audiobookshelf",
                "org.opencontainers.image.title": "audiobookshelf",
                "org.opencontainers.image.url": "https://github.com/advplyr/audiobookshelf",
                "org.opencontainers.image.version": "2.23.0",
                "traefik.enable": "true",
                "traefik.http.routers.audiobookshelf.entrypoints": "websecure",
                "traefik.http.routers.audiobookshelf.rule": "Host(`audiobooks.xxx`)",
                "traefik.http.routers.audiobookshelf.tls": "true",
                "traefik.http.routers.audiobookshelf.tls.certresolver": "letsencrypt",
                "traefik.http.services.audiobookshelf.loadbalancer.server.port": "80"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "",
            "SandboxKey": "",
            "Ports": {},
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "audiobookshelf": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "audiobookshelf",
                        "audiobookshelf"
                    ],
                    "MacAddress": "",
                    "DriverOpts": null,
                    "GwPriority": 0,
                    "NetworkID": "ea3c4f8fd9cb986c3d9b2942eaef061b556a4917e06b96f4a5e83344d135cf24",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": [
                        "audiobookshelf",
                        "44323da0ef06"
                    ]
                },
                "traefik": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "audiobookshelf",
                        "audiobookshelf"
                    ],
                    "MacAddress": "",
                    "DriverOpts": null,
                    "GwPriority": 0,
                    "NetworkID": "1890cf9ac72f3292c8cbc378e2d1a7b88f1e8febb0a858f3799177a5acbe32ee",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": [
                        "audiobookshelf",
                        "44323da0ef06"
                    ]
                }
            }
        }
    }
]

Dinth avatar May 19 '25 04:05 Dinth

I'm not seeing any of those SHA for the last few releases at https://github.com/advplyr/audiobookshelf/pkgs/container/audiobookshelf (but I could be missing it, I only checked the last few releases).

nichwall avatar May 19 '25 05:05 nichwall

hmmm should the image sha in docker inspect match the image sha on docker hub? Now ive tried image: ghcr.io/advplyr/audiobookshelf@sha256:2d8bee3e87e860d67e11e13b5c42d97cb1fe071de53dea5502b3a9292e75e024 in docker compose, docker inspect still shows "Image": "sha256:9958782bff325541baaa94097e03cc59ac3c2530b7af349ee23e08c4448ccd5b",

Dinth avatar May 19 '25 06:05 Dinth

hmmm

root@r720-omv:~# docker image ls | grep audio
root@r720-omv:~# docker image pull ghcr.io/advplyr/audiobookshelf@sha256:2d8bee3e87e860d67e11e13b5c42d97cb1fe071de53dea5502b3a9292e75e024
ghcr.io/advplyr/audiobookshelf@sha256:2d8bee3e87e860d67e11e13b5c42d97cb1fe071de53dea5502b3a9292e75e024: Pulling from advplyr/audiobookshelf
f18232174bc9: Already exists 
05c1247b2bae: Pull complete 
301aebe3d905: Pull complete 
699b753813e6: Pull complete 
7f00dbe3b80b: Pull complete 
6299b7655c13: Pull complete 
38240dec5faf: Pull complete 
06015e64cd47: Pull complete 
68b7db6e6838: Pull complete 
Digest: sha256:2d8bee3e87e860d67e11e13b5c42d97cb1fe071de53dea5502b3a9292e75e024
Status: Downloaded newer image for ghcr.io/advplyr/audiobookshelf@sha256:2d8bee3e87e860d67e11e13b5c42d97cb1fe071de53dea5502b3a9292e75e024
ghcr.io/advplyr/audiobookshelf@sha256:2d8bee3e87e860d67e11e13b5c42d97cb1fe071de53dea5502b3a9292e75e024
root@r720-omv:~# docker image ls | grep audi
ghcr.io/advplyr/audiobookshelf                           <none>             9958782bff32   2 days ago       312MB
root@r720-omv:~# 

Dinth avatar May 19 '25 06:05 Dinth

What happens if you change your compose from :latest to :2.23.0?

nichwall avatar May 19 '25 13:05 nichwall

My problem resolved, i had working_dir set in my compose file and it looks like it has changed recently, the other thread pointed me towards this.

Dinth avatar May 19 '25 16:05 Dinth

My problem resolved, i had working_dir set in my compose file and it looks like it has changed recently, the other thread pointed me towards this.

Thanks for confirming. Out of curiosity, why did you have working_dir set? Did you do that yourself or see that in a guide?

nichwall avatar May 19 '25 16:05 nichwall

Ive migrated from docker standalone to docker compose with a help of docker-autocompose 🤭

Dinth avatar May 19 '25 17:05 Dinth

Ive migrated from docker standalone to docker compose with a help of docker-autocompose 🤭

Thanks, that is good to know that it is from a specific tool and something for us to look out for when other people are reporting upgrade issues.

nichwall avatar May 19 '25 17:05 nichwall

My problem resolved, i had working_dir set in my compose file and it looks like it has changed recently, the other thread pointed me towards this.

This was my issue. For reference, when I made it, I just used normal docker compose, but it set the working directory as "/" (no quotes) according to what portainer is showing me. Apparently in this latest update, they changed this... Since the above quote didn't really specify on 'what to do', I just removed the "/" and left it blank, and that seems to have worked...

HikariNoKitsune avatar May 20 '25 18:05 HikariNoKitsune

My problem resolved, i had working_dir set in my compose file and it looks like it has changed recently, the other thread pointed me towards this.

This was my issue. For reference, when I made it, I just used normal docker compose, but it set the working directory as "/" (no quotes) according to what portainer is showing me. Apparently in this latest update, they changed this... Since the above quote didn't really specify on 'what to do', I just removed the "/" and left it blank, and that seems to have worked...

Yeah, unless you are specifically doing something to try and edit stuff within the container or really know what you are doing, you should not set work_dir in a compose.

nichwall avatar May 20 '25 19:05 nichwall

I had the same issue. Using Cosmos Server on a Ubuntu Server 24 and the composes get modified by Cosmos when it runs them. Whatever happened with a recent upgrade to Audiobookshelf my port mapping statements wouldn't "stick" in the compose and the container wouldn't stay started. To be clear on the solution, as above, I removed the "work_dir" entry completely in the compose and restarted the container. It restarted but was unaccessible because the ports. Then I could update the port mapping and it stuck. So, problem resolved. Thank you for posting these solutions. Appears to be resolved, but the updates going forward should look for this issue.

Seventy-9DegreesNorth avatar May 23 '25 14:05 Seventy-9DegreesNorth

I had the same issue. Using Cosmos Server on a Ubuntu Server 24 and the composes get modified by Cosmos when it runs them. Whatever happened with a recent upgrade to Audiobookshelf my port mapping statements wouldn't "stick" in the compose and the container wouldn't stay started. To be clear on the solution, as above, I removed the "work_dir" entry completely in the compose and restarted the container. It restarted but was unaccessible because the ports. Then I could update the port mapping and it stuck. So, problem resolved. Thank you for posting these solutions. Appears to be resolved, but the updates going forward should look for this issue.

The work_dir and port being modified by other tools (such as Cosmos) is outside the control of the container (in this case Audiobookshelf). If your container manager/compose wrapper is caching previous versions or setting things incorrectly, you will need to make sure older versions of the container and image are removed when updating.

nichwall avatar May 23 '25 14:05 nichwall

updates going forward should look for this issue.

You should file a bug report with Cosmos for modifying compose files that they shouldn't be touching. As nichwall stated, this is outside of ABS's control.

DieselTech avatar May 23 '25 14:05 DieselTech

It's a fair point - I didn't mean to imply blame -- from the user's perspective it's hard to know where the problem arises, since there are always multiple systems. It appeared from the thread that ABS updates triggered a change that people were having problems with, and that the solution proposed worked. I honestly can't understand why Cosmos feels it has to modify the composes -- it's not ABS' issue for sure -- just pointing it out in the event there were any other ABS/Cosmos users and if the issue WAS with the update. Apologies.

Seventy-9DegreesNorth avatar May 23 '25 14:05 Seventy-9DegreesNorth

My problem resolved, i had working_dir set in my compose file and it looks like it has changed recently, the other thread pointed me towards this.

This was my issue. For reference, when I made it, I just used normal docker compose, but it set the working directory as "/" (no quotes) according to what portainer is showing me. Apparently in this latest update, they changed this... Since the above quote didn't really specify on 'what to do', I just removed the "/" and left it blank, and that seems to have worked...

Yeah, unless you are specifically doing something to try and edit stuff within the container or really know what you are doing, you should not set work_dir in a compose.

The thing for me, was that I didn't set a work_dir in compose. at least its not in the compose file i have in portainer. so idk when it got switched to that. just a curiosity i guess

HikariNoKitsune avatar May 23 '25 15:05 HikariNoKitsune

My problem resolved, i had working_dir set in my compose file and it looks like it has changed recently, the other thread pointed me towards this.

Thank you very much. I confirm it fixed the issue for me too. I was stuck on image 2.21.0 and couldn't upgradE. Tried re-pulling the image many times, clearing /config and /metadata

It was just that the 2.21 image pushed "/" as a working dir where all versions after need "/app"

Not knowing that I had to re-build AND remove the working dir field to have the latest image pushing /app at the rebuild.

Image

I learned how to fix this today. Thank you Internet 🥇

eskiiom avatar Jul 07 '25 19:07 eskiiom

My problem resolved, i had working_dir set in my compose file and it looks like it has changed recently, the other thread pointed me towards this.

Thank you very much. I confirm it fixed the issue for me too. I was stuck on image 2.21.0 and couldn't upgradE. Tried re-pulling the image many times, clearing /config and /metadata

It was just that the 2.21 image pushed "/" as a working dir where all versions after need "/app"

Not knowing that I had to re-build AND remove the working dir field to have the latest image pushing /app at the rebuild.

Image I learned how to fix this today. Thank you Internet 🥇

Holy shit, THANK YOU! This fixed the issue. Been dealing with it for months...

ftgwgames avatar Aug 17 '25 07:08 ftgwgames