Skip to content

Inconsistent resolution of dockerfile paths with extends across multiple yaml files #1326

@jan-matejka

Description

@jan-matejka

setup:

% pc --version
podman-compose version 1.5.0
podman version 5.4.2

% pc config
services:
  base:
    build:
      context: /home/alex/sscce
      dockerfile: scope/base/base.Dockerfile
  user:
    extends:
      file: scope/user/../base/base.yaml
      service: base

% tree
.
├── compose.yaml
├── scope
│   ├── base
│   │   ├── base.Dockerfile
│   │   └── base.yaml
│   ├── compose.yaml
│   └── user
│       └── user.yaml
└── tags

4 directories, 6 files

% cat compose.yaml
include:
  - scope/compose.yaml

% cat scope/compose.yaml
include:
  - base/base.yaml
  - user/user.yaml

% cat scope/base/base.Dockerfile
FROM docker.io/library/debian:trixie-slim

% cat scope/base/base.yaml
services:
  base:
    build:
      context: ./
      dockerfile: scope/base/base.Dockerfile

% cat scope/user/user.yaml
services:
  user:
    extends:
      service: base
      file: ../base/base.yaml

% pc build base
STEP 1/1: FROM docker.io/library/debian:trixie-slim
COMMIT sscce_base
--> 47b8e49b67f0
Successfully tagged localhost/sscce_base:latest
Successfully tagged docker.io/library/debian:trixie-slim
47b8e49b67f0d188d504d7f9458c61d9f58b0d32e3a115371bed788e74a339b4

The problem:

% pc build user
Traceback (most recent call last):
  File "/usr/bin/podman-compose", line 8, in <module>
    sys.exit(main())
             ~~~~^^
  File "/usr/lib/python3/dist-packages/podman_compose.py", line 4256, in main
    asyncio.run(async_main())
    ~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/usr/lib/python3/dist-packages/podman_compose.py", line 4252, in async_main
    await podman_compose.run()
  File "/usr/lib/python3/dist-packages/podman_compose.py", line 2072, in run
    retcode = await cmd(self, args)
              ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/podman_compose.py", line 2986, in compose_build
    s = await t
        ^^^^^^^
  File "/usr/lib/python3.13/asyncio/tasks.py", line 634, in _wait_for_one
    return f.result() if resolve else f
           ~~~~~~~~^^
  File "/usr/lib/python3/dist-packages/podman_compose.py", line 2960, in build_one
    build_args = container_to_build_args(
        compose, cnt, args, os.path.exists, cleanup_callbacks=cleanup_callbacks
    )
  File "/usr/lib/python3/dist-packages/podman_compose.py", line 2902, in container_to_build_args
    raise OSError(f"Dockerfile not found in {dockerfile}")
OSError: Dockerfile not found in scope/user/../base/scope/base/base.Dockerfile

Quite possibly related to #1301 and #130

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions