-
Notifications
You must be signed in to change notification settings - Fork 540
Description
Describe the bug
At the beginning I would thank you for developing podman-compose.
podman-compose does not correctly resolve extended services dependency from extends tag.
I have in example docker-compose.yml file below dependencies (see Reproduce steps):
ci-dev-bash2 (depends from) <- ci-dev-bash <- bash
and in the same file:
other-bash (depends from) <- bash.
I've added to every compose service unique mount to /tmp and check what podman command generated by podman-compose. I checked what mounts were added to every service from file.
To Reproduce
Steps to reproduce the behavior:
- create docker-compose.yml file according below content:
version: '3.5'
services:
bash:
cap_add:
- NET_ADMIN
- SYSLOG
command: [/bin/bash]
domainname: ${HOSTNAME}
environment:
- USER_HOME=${HOME}
- USER_NAME=${USER}
hostname: myhostname
image: ubuntu:latest
network_mode: host
security_opt:
- seccomp:unconfined
volumes:
- /tmp/service_bash:/tmp/service_bash:rw
ci-dev-bash:
extends:
service: bash
volumes:
- /tmp/service_ci-dev-bash:/tmp/service_ci-dev-bash:rw
ci-dev-bash2:
extends:
service: ci-dev-bash
volumes:
- /tmp/service_ci-dev-bash2:/tmp/service_ci-dev-bash2:rw
other-bash:
extends:
service: bash
volumes:
- /tmp/service_other-bash:/tmp/service_other-bash:rw
- run command:
podman-compose run --rm --no-deps other-bash bash
Expected behavior
podman run --name=slawek_other-bash_tmp13814 \
--rm -i --pod=pod_slawek --security-opt seccomp=unconfined \
--label io.podman.compose.config-hash=23e6f025107a42496abbad6d2b740fd8fd42bc4e18eadafa64614c3b879411da --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=other-bash \
--cap-add NET_ADMIN --cap-add SYSLOG -e USER_HOME=/home/slawek -e USER_NAME=slawek \
**-v /tmp/service_bash:/tmp/service_bash:rw -v /tmp/service_other-bash:/tmp/service_other-bash:rw** \
--network host --hostname myhostname --tty ubuntu:latest bash
I expected for podman-compose service "other-bash" to have mounts only from "bash" and "other-bash" (result of correct solving services dependency):
_/tmp/service_bash:/tmp/service_bash_ (bash)
_/tmp/service_other-bash:/tmp/service_other-bash_ (other-bash)
Actual behavior
podman run \
--name=slawek_other-bash_tmp13814 --rm -i --pod=pod_slawek --security-opt seccomp=unconfined \
--label io.podman.compose.config-hash=23e6f025107a42496abbad6d2b740fd8fd42bc4e18eadafa64614c3b879411da --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=other-bash \
--cap-add NET_ADMIN --cap-add SYSLOG -e USER_HOME=/home/slawek -e USER_NAME=slawek \
-v /tmp/service_bash:/tmp/service_bash:rw **-v /tmp/service_ci-dev-bash:/tmp/service_ci-dev-bash:rw** -v /tmp/service_other-bash:/tmp/service_other-bash:rw **-v /tmp/service_ci-dev-bash2:/tmp/service_ci-dev-bash2:rw** \
--network host --hostname myhostname --tty ubuntu:latest bash
podman-compose added to service "other-bash" incorrectly mounts from services what are not in dependency chain:
_/tmp/service_ci-dev-bash:/tmp/service_ci-dev-bash_ (**incorrect** - from **ci-dev-bash**)
_/tmp/service_ci-dev-bash2:/tmp/service_ci-dev-bash2_ (**incorrect** - from **ci-dev-bash2**).
& correct content from dependency:
_/tmp/service_bash:/tmp/service_bash_ (**bash**)
_/tmp/service_other-bash:/tmp/service_other-bash_ (**other-bash**)
It looks that podman-compose read all services information from docker-compose.yml and during run service with dependency adding information from all services inside docker-compose.yml even that what is not in dependency chain.
Output
$ podman-compose version # Version from 25.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
$ podman-compose up
I do not use "up" parameter. Only "run".
Environment:
- OS: Rocky Linux release 8.5 (Green Obsidian)
- podman version: 3.4.2
- podman compose version: (git hex) ebb3dfe
Additional context
Similar problem is visible for run below command:
podman-compose run --rm --no-deps bash bash
Podman does not depends from anything but mount from other services is added - but shouldn't:
podman run \
--name=slawek_bash_tmp46399 --rm -i --pod=pod_slawek --security-opt seccomp=unconfined \
--label io.podman.compose.config-hash=23e6f025107a42496abbad6d2b740fd8fd42bc4e18eadafa64614c3b879411da --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=bash \
--cap-add NET_ADMIN --cap-add SYSLOG -e USER_HOME=/home/slawek -e USER_NAME=slawek \
-v /tmp/service_bash:/tmp/service_bash:rw **-v /tmp/service_ci-dev-bash:/tmp/service_ci-dev-bash:rw -v /tmp/service_other-bash:/tmp/service_other-bash:rw -v /tmp/service_ci-dev-bash2:/tmp/service_ci-dev-bash2:rw** \
--network host --hostname myhostname --tty ubuntu:latest bash