Skip to content

Using Compose with build statement a container is not detected as running and recreated with each run #955

Open
@vb-linetco

Description

@vb-linetco

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:

  1. using the above setup
  2. 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:

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions