Open
Description
Describe the Bug
Using docker_compose
together with a docker-compose.yaml
with a custom build image like for example:
- docker-compose.yml:
version: '3.5'
services:
example:
build:
context: .
dockerfile: Dockerfile
- Dockerfile:
FROM alpine:3.14
CMD /bin/sh
- docker_example.pp:
class docker_example {
file { [
"/srv/docker-configs",
"/srv/docker-configs/example"]:
ensure => directory,
group => 'root',
owner => 'root'
}
file { '/srv/docker-configs/example/Dockerfile':
mode => '644',
source => 'example/Dockerfile',
require => File["/srv/docker-configs/example"]
}
exec {"docker-compose build":
cwd => "/srv/docker-configs/example",
path => "/usr/local/bin", # for updated docker-compose
refreshonly => true,
subscribe => [
File["/srv/docker-configs/example/Dockerfile"],
],
notify => Docker_compose["example"]
}
docker_compose { "example":
compose_file => ["/srv/docker-configs/example/docker-compose.yml"],
ensure => present,
require => File["/srv/docker-configs/example/docker-compose.yml"],
}
}
And having docker-compose >= 2.8.0 installed, one can observe the following issue.
Puppet does not detect the docker-container as already running and tries to recreates it with every puppet run.
The following message can be observed in the logs of puppet with each run
puppet-agent: (/Stage[main]/Docker_example/Dockercompose[example]/Docker_compose[example]/ensure) created (corrective)
Expected Behavior
The container is not attempted to be created as a corrective measure with each puppet agent
run when it is already running.
Steps to Reproduce
Steps to reproduce the behavior:
- using the above setup
- run puppet agent -t
Environment
- Puppet Server Version 5.5.22
- Module Version Version 3.10.2, also tried more recent versions.
- Platform Ubuntu 22.04
- Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.1
- Docker Compose version v2.18.0
Additional Context
During further analysis I was able to track the issue down to following changes:
- The separator for images built by docker-compose has been changed from
_
to-
with this commit: Docker compose - The Migrate to Compose V2 guide also states that this has been changed due to
_
not being a valid character for DNS-names. - From July 2023 Compose V1 stopped receiving updates. It’s also no longer available in new releases of Docker Desktop.
Workaround:
- With a change of the separator
to
-
, the issue cannot be observed anymore.