containers / containers/podman-compose

'podman-compose build' builds replicate images for each service in docker-compose.yaml that share a common image.

Open
#973 0 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

**Summary**
When executing `podman-compose build`, a build is performed for each service in the docker-compose.yaml that share a common image.

This is not an issue in v1.0.6.

This was reproduced on the latest commit on the main branch (#16cbcf4)

**Steps to reproduce**
1. Directory setup: project_directory/docker, which contains docker-compose.yaml, .env, Dockerfile
2. Define docker-compose.yaml and Dockerfile (below)
3. Execute `podman-compose build` from project_directory/docker

docker-compose.yaml:
```
x-common:
&common
image: project/dummy:0.1.0
build:
context: project_directory/docker
dockerfile: Dockerfile

services:
service1:
<<: *common
entrypoint: /bin/sh
command: -c "while :; do echo 'Hello, World!'; sleep 3600; done"

service2:
<<: *common
entrypoint: /bin/sh
command: -c "while :; do echo 'Hello, again!': sleep 3600; done"

service3:
<<: *common
entrypoint: /bin/sh
command: -c "while :; do echo 'Goodbye, World!'; sleep 3600; done"
```

Dockerfile:
```
FROM busybox:latest
RUN echo "hello world"
```

**Expected behavior**
A clear and concise description of what you expected to happen.

**Actual behavior**
Each service with a common images has a separate build

**Output**

```
$ podman-compose version
podman-compose version 1.1.0
podman version 4.9.4-rhel
podman --version
podman version 4.9.4-rhel
```

```
$ podman-compose build
STEP 1/2: FROM busybox:latest
STEP 1/2: FROM busybox:latest
STEP 1/2: FROM busybox:latest
STEP 2/2: RUN echo "hello world"
STEP 2/2: RUN echo "hello world"
STEP 2/2: RUN echo "hello world"
hello world
hello world
hello world
COMMIT project/dummy:0.0.1
COMMIT project/dummy:0.0.1
COMMIT project/dummy:0.0.1
--> 5a91e4e65d80
Successfully tagged localhost/project/dummy:0.0.1
5a91e4e65d803eccc851a72c9f835cc99492f851ad292d87d2723b68445ab2aa
--> 68b7cabbf235
Successfully tagged localhost/project/dummy:0.0.1
68b7cabbf235bc4cdeb2eb7c183ad6211ce165a7a8f0356e4b199e35df98c342
--> bb2e534fb9bd
Successfully tagged localhost/project/dummy:0.0.1
bb2e534fb9bd29df004dc3a4bc0a4cbcf9788e7278cff478b487a79f34da8383
```

```
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/project/dummy 0.0.1 bb2e534fb9bd 3 minutes ago 1.5 MB
68b7cabbf235 3 minutes ago 1.5 MB
5a91e4e65d80 3 minutes ago 1.5 MB
```

```
$ podman-compose up
...
[service3] | Goodbye, World!
[service1] | Hello, World!
[service2] | Hello, again!
```

**Environment:**
- OS: Linux
- podman version: 4.9.4-rhel
- podman compose version: 1.1.0 (#16cbcf4)

**Additional Info:**
I have a work around, which is to define a 'build-dummy' service, and move the build info there:

docker-compose.yaml:
```
x-common:
&common
image: project/dummy:0.0.2

services:
build_dummy:
<<: *common
build:
context: project_directory/docker
dockerfile: Dockerfile
profiles:
- build

service1:
<<: *common
...
```

```
$ podman-compose build
STEP 1/2: FROM busybox:latest
STEP 2/2: RUN echo "hello world"
--> Using cache 5a91e4e65d803eccc851a72c9f835cc99492f851ad292d87d2723b68445ab2aa
COMMIT project/dummy:0.0.2
--> 5a91e4e65d80
Successfully tagged localhost/project/dummy:0.0.2
5a91e4e65d803eccc851a72c9f835cc99492f851ad292d87d2723b68445ab2aa

$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/project/dummy 0.0.2 5a91e4e65d80 3 minutes ago 1.5 MB
```

```
$ podman-compose up
...
[service3] | Goodbye, World!
[service1] | Hello, World!
[service2] | Hello, again!
```

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.