containers / containers/podman-compose
Option "--remove-orphans" always deletes all containers, not just orphaned containers and "--no-deps" is just ignored
- Dominant language
- Python
- Stars
- 6.2k
- Forks
- 622
- PR merge metrics
- No merged PRs in 30d
Description
**Describe the bug**
The option --remove-orphans should just remove orphaned containers, however it results in all containers being removed.
Also --no-deps seems to just be ignored entirely...
**To Reproduce**
Steps to reproduce the behavior:
1. Create file "test-compose.yml":
```yaml
version: '3.8'
services:
service1:
image: postgres
container_name: service1
depends_on:
- service2
service2:
image: postgres
container_name: service2
service3:
image: postgres
container_name: service3
```
2. Start containers `podman-compose -f test-compose.yml --project-name test up -d`
3. Try to restart only service1 while cleaning up any possible old orphans: `podman-compose -f test-compose.yml --project-name test up -d --force-recreate --remove-orphans --no-deps service1`
**Expected behavior**
Expected behaviour based on podman-compose docs and by doing the same with docker compose:
**Only** service1 is stopped and restarted and if there are any **orphaned** containers they are removed.
service2 and service3 should be untouched.
**Actual behavior**
All containers will be stopped and service1 **and** service2 are restarted.
**Output**
```
$ podman-compose version
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.6.1
podman-compose version 1.0.6
podman --version
podman version 4.6.1
exit code: 0
$ podman-compose -f test-compose.yml --project-name test up -d
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.6.1
** excluding: set()
['podman', 'ps', '--filter', 'label=io.podman.compose.project=test', '-a', '--format', '{{ index .Labels "io.podman.compose.config-hash"}}']
['podman', 'network', 'exists', 'test_default']
podman run --name=service2 -d --label io.podman.compose.config-hash=19a172dd748866b0412e6b41e7f3d0ff06e0b52cb29d78531f3bf47a97dfb81a --label io.podman.compose.project=test --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@test.service --label com.docker.compose.project=test --label com.docker.compose.project.working_dir=/home/xxx --label com.docker.compose.project.config_files=test-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=service2 --net test_default --network-alias service2 postgres
fd6a7a0e68f203ec4ab01b874f6fde487f5f8257cee8474e733d8ea0b93f3613
exit code: 0
['podman', 'network', 'exists', 'test_default']
podman run --name=service3 -d --label io.podman.compose.config-hash=19a172dd748866b0412e6b41e7f3d0ff06e0b52cb29d78531f3bf47a97dfb81a --label io.podman.compose.project=test --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@test.service --label com.docker.compose.project=test --label com.docker.compose.project.working_dir=/home/xxx --label com.docker.compose.project.config_files=test-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=service3 --net test_default --network-alias service3 postgres
8f29b3ea651f385b336975ff2314b84a1894f3b1dbd6fa3fe632c8f29565beeb
exit code: 0
['podman', 'network', 'exists', 'test_default']
podman run --name=service1 -d --requires=service2 --label io.podman.compose.config-hash=19a172dd748866b0412e6b41e7f3d0ff06e0b52cb29d78531f3bf47a97dfb81a --label io.podman.compose.project=test --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@test.service --label com.docker.compose.project=test --label com.docker.compose.project.working_dir=/home/xxx --label com.docker.compose.project.config_files=test-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=service1 --net test_default --network-alias service1 postgres
0d8444e0a43c9f0cf0e55f1d6a35e4b50362c1ff049ceaced78ec88e11c3be64
$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd6a7a0e68f2 docker.io/library/postgres:latest postgres 7 seconds ago Exited (1) 5 seconds ago service2
8f29b3ea651f docker.io/library/postgres:latest postgres 6 seconds ago Exited (1) 7 seconds ago service3
0d8444e0a43c docker.io/library/postgres:latest postgres 5 seconds ago Exited (1) 5 seconds ago service1
$ podman-compose -f test-compose.yml --project-name test up -d --force-recreate --remove-orphans --no-deps service1
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.6.1
** excluding: {'service3'}
['podman', 'ps', '--filter', 'label=io.podman.compose.project=test', '-a', '--format', '{{ index .Labels "io.podman.compose.config-hash"}}']
recreating: ...
** excluding: {'service3'}
podman stop -t 10 service1
service1
exit code: 0
podman stop -t 10 service2
service2
exit code: 0
podman rm service1
service1
exit code: 0
podman rm service2
service2
exit code: 0
['podman', 'ps', '--filter', 'label=io.podman.compose.project=test', '-a', '--format', '{{ .Names }}']
podman stop service3
service3
exit code: 0
podman rm service3
service3
exit code: 0
recreating: done
['podman', 'network', 'exists', 'test_default']
podman run --name=service2 -d --label io.podman.compose.config-hash=19a172dd748866b0412e6b41e7f3d0ff06e0b52cb29d78531f3bf47a97dfb81a --label io.podman.compose.project=test --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@test.service --label com.docker.compose.project=test --label com.docker.compose.project.working_dir=/home/xxx --label com.docker.compose.project.config_files=test-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=service2 --net test_default --network-alias service2 postgres
bac9553d8687a930f89bfc1ffc06c1f7dc688518835db29ca0a887fe3f1f7259
exit code: 0
** skipping: service3
['podman', 'network', 'exists', 'test_default']
podman run --name=service1 -d --requires=service2 --label io.podman.compose.config-hash=19a172dd748866b0412e6b41e7f3d0ff06e0b52cb29d78531f3bf47a97dfb81a --label io.podman.compose.project=test --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@test.service --label com.docker.compose.project=test --label com.docker.compose.project.working_dir=/home/xxx --label com.docker.compose.project.config_files=test-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=service1 --net test_default --network-alias service1 postgres
7d276badca8f3d988f6e3832520eb28b600afd0679efaa970cad5229c9e8ffa5
exit code: 0
$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bac9553d8687 docker.io/library/postgres:latest postgres 11 seconds ago Exited (1) 10 seconds ago service2
7d276badca8f docker.io/library/postgres:latest postgres 9 seconds ago Exited (1) 10 seconds ago service1
```
**Environment:**
- OS: WSL 2 (Oracle Linux 9.2)
- podman version: 4.6.1
- podman compose version: 1.0.6
Contributor guide
Assessment
This issue has not been assessed yet.