containers / containers/podman-compose

Inconsistent resolution of dockerfile paths with extends across multiple yaml files

Open
#1,326 2 comments 3 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
6.2k
Forks
622
PR merge metrics
No merged PRs in 30d

Description

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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.