Skip to content

Startup PermissionError on bind mounts with rootless Podman #88

@prateeknischal

Description

@prateeknischal

I am trying to run the compose using podman in rootless mode. I see the following error,

[yubal] | [15:13:10] INFO     uvicorn.error - Started server process [1]
[yubal] |            INFO     uvicorn.error - Waiting for application startup.
[yubal] |            INFO     yubal_api.api.app - Starting application...
[yubal] | [15:13:11] ERROR    uvicorn.error - Traceback (most recent call last):
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/starlette/routing.p
[yubal] |                     y", line 694, in lifespan
[yubal] |                         async with self.lifespan_context(app) as maybe_state:
[yubal] |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File "/usr/local/lib/python3.12/contextlib.py", line 210,
[yubal] |                     in __aenter__
[yubal] |                         return await anext(self.gen)
[yubal] |                                ^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/fastapi/routing.py"
[yubal] |                     , line 201, in merged_lifespan
[yubal] |                         async with original_context(app) as
[yubal] |                     maybe_original_state:
[yubal] |                                    ^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File "/usr/local/lib/python3.12/contextlib.py", line 210,
[yubal] |                     in __aenter__
[yubal] |                         return await anext(self.gen)
[yubal] |                                ^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/yubal_api/api/app.p
[yubal] |                     y", line 208, in lifespan
[yubal] |                         await asyncio.to_thread(run_migrations)
[yubal] |                       File "/usr/local/lib/python3.12/asyncio/threads.py", line
[yubal] |                     25, in to_thread
[yubal] |                         return await loop.run_in_executor(None, func_call)
[yubal] |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File
[yubal] |                     "/usr/local/lib/python3.12/concurrent/futures/thread.py",
[yubal] |                     line 59, in run
[yubal] |                         result = self.fn(*self.args, **self.kwargs)
[yubal] |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/yubal_api/api/app.p
[yubal] |                     y", line 115, in run_migrations
[yubal] |                         command.upgrade(alembic_cfg, "head")
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/alembic/command.py"
[yubal] |                     , line 483, in upgrade
[yubal] |                         script.run_env()
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/alembic/script/base
[yubal] |                     .py", line 545, in run_env
[yubal] |                         util.load_python_file(self.dir, "env.py")
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/alembic/util/pyfile
[yubal] |                     s.py", line 116, in load_python_file
[yubal] |                         module = load_module_py(module_id, path)
[yubal] |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/alembic/util/pyfile
[yubal] |                     s.py", line 136, in load_module_py
[yubal] |                         spec.loader.exec_module(module)  # type: ignore
[yubal] |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[yubal] |                       File "<frozen importlib._bootstrap_external>", line 999,
[yubal] |                     in exec_module
[yubal] |                       File "<frozen importlib._bootstrap>", line 488, in
[yubal] |                     _call_with_frames_removed
[yubal] |                       File
[yubal] |                     "/app/.venv/lib/python3.12/site-packages/yubal_api/migration
[yubal] |                     s/env.py", line 18, in <module>
[yubal] |                         settings.db_path.parent.mkdir(parents=True,
[yubal] |                     exist_ok=True)
[yubal] |                       File "/usr/local/lib/python3.12/pathlib.py", line 1311, in
[yubal] |                     mkdir
[yubal] |                         os.mkdir(self, mode)
[yubal] |                     PermissionError: [Errno 13] Permission denied:
[yubal] |                     '/app/config/yubal'
[yubal] |
[yubal] |            ERROR    uvicorn.error - Application startup failed. Exiting.

The user I am running as has an ID of 1000, the same is set in the compose file. The directory mounted to the container is owned by the Id 1000.


System Details

$ uname -a
Linux frost 6.17.11-200.fc42.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Dec  9 00:25:56 UTC 2025 x86_64 GNU/Linux

$ getenforce
Disabled

$ cat /etc/*release* | head -3
Fedora release 42 (Adams)
NAME="Fedora Linux"
VERSION="42 (Server Edition)"

$ podman --version
podman version 5.7.0

$ podman info --format '{{.Host.Security.Rootless}}'
true

Compose file

services:
  yubal:
    image: ghcr.io/guillevc/yubal:latest
    container_name: yubal
    environment:
      YUBAL_SCHEDULER_CRON: "0 0 * * *"
      YUBAL_DOWNLOAD_UGC: false
      YUBAL_TZ: UTC
    volumes:
      - /mnt/TV/Music:/app/data:Z
      - ./config:/app/config
    restart: unless-stopped

Note: I was on an older version and that was working file, I pulled the latest image and then it broke.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions