containers / containers/podman-compose
extends -> file used more than once does not work in podman-compose correctly for 2nd and next services
- Dominant language
- Python
- Stars
- 6.2k
- Forks
- 622
- PR merge metrics
- No merged PRs in 30d
Description
**Describe the bug**
When `docker-compose.yml` use `extends` tag what loads config by `file` tag from `docker-compose-general.yml` file for first service from `docker-compose.yml` - `sh` works well, but for second `ci-dev-sh` not. It means that incorrectly recognize docker image for second service - `ci-dev-sh` and does not inherit mounts from `sh`.
**To Reproduce**
Steps to reproduce the behavior:
1. create `docker-compose.yml` file with content:
```
version: '3.5'
services:
sh:
extends:
file: docker-compose-general.yml
service: sh2
ci-dev-sh:
extends:
file: docker-compose-general.yml
service: ci-dev-sh2
```
2. create `docker-compose-general.yml` file with content:
```
services:
sh2:
command: [/bin/sh]
image: busybox
volumes:
- /tmp/service_sh:/tmp/service_sh:rw
ci-dev-sh2:
extends:
service: sh2
volumes:
- /tmp/service_ci-dev-sh:/tmp/service_ci-dev-sh:rw
```
3. run 1st command: `podman-compose run --rm sh sh`
4. run 2nd command: `podman-compose run --rm ci-dev-sh sh`
1st command works as expected - started sh service:
`podman run --name=slawek_sh_tmp50285 --rm -i --pod=pod_slawek --label io.podman.compose.config-hash=ff28310f0c2bb389c418e1a834ea9801adacc3f014ac99dabed617361ca2278f --label io.podman.compose.project=slawek --label io.podman.compose.version=1.0.4 --label com.docker.compose.project=slawek --label com.docker.compose.project.working_dir=/home/slawek --label com.docker.compose.project.config_files=docker-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=sh -v /tmp/service_sh:/tmp/service_sh:rw --net slawek_default --network-alias sh --tty busybox sh`
**Expected behavior for 2nd command**
`podman run --name=slawek_ci-dev-sh_tmp43794 --rm -i --pod=pod_slawek --label io.podman.compose.config-hash=ff28310f0c2bb389c418e1a834ea9801adacc3f014ac99dabed617361ca2278f --label io.podman.compose.project=slawek --label io.podman.compose.version=1.0.4 --label com.docker.compose.project=slawek --label com.docker.compose.project.working_dir=/home/slawek --label com.docker.compose.project.config_files=docker-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=ci-dev-sh -v /tmp/service_sh:/tmp/service_sh:rw -v /tmp/service_ci-dev-sh:/tmp/service_ci-dev-sh:rw --net slawek_default --network-alias ci-dev-sh --tty busybox sh`
1. Expected docker image `busybox`.
2. Expected mount inherited from `sh` service: `-v /tmp/service_sh:/tmp/service_sh:rw`.
**Actual behavior for 2nd command**
`podman run --name=slawek_ci-dev-sh_tmp43794 --rm -i --pod=pod_slawek --label io.podman.compose.config-hash=ff28310f0c2bb389c418e1a834ea9801adacc3f014ac99dabed617361ca2278f --label io.podman.compose.project=slawek --label io.podman.compose.version=1.0.4 --label com.docker.compose.project=slawek --label com.docker.compose.project.working_dir=/home/slawek --label com.docker.compose.project.config_files=docker-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=ci-dev-sh -v /tmp/service_ci-dev-sh:/tmp/service_ci-dev-sh:rw --net slawek_default --network-alias ci-dev-sh --tty slawek_ci-dev-sh sh`
1. Bad docker image. Is: `slawek_ci-dev-sh`, should be: `busybox`
3. Missing mount `-v /tmp/service_sh:/tmp/service_sh:rw` - looks like not inherited from service `sh`.
**Output**
```
$ podman-compose version # Version from 29.03.2022
podman-compose version: 1.0.4
['podman', '--version', '']
using podman version: 3.4.2
podman-composer version 1.0.4
podman --version
podman version 3.4.2
exit code: 0
```
**Environment:**
- OS: Rocky Linux release 8.5 (Green Obsidian)
- podman version: 3.4.2
- podman compose version: (git hex) https://github.com/containers/podman-compose/commit/fbff315e18fb4c98d1d7a868fbcac25060b06694
Contributor guide
Research direction
Reproduce the issue using the docker-compose.yml and docker-compose-general.yml examples with the two podman-compose run commands. Trace how each extends service is resolved and compare the generated command for ci-dev-sh with the expected image and inherited mounts. Done means the second service uses busybox and includes both /tmp/service_sh and /tmp/service_ci-dev-sh mounts.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, python
- Domain
- cli, devops
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 48/100