Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
vb-linetco opened this issue Oct 17, 2023 · 10 comments · May be fixed by #990
Labels

Comments

@vb-linetco
Copy link

vb-linetco commented Oct 17, 2023

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:

@vb-linetco vb-linetco added the bug label Oct 17, 2023
@vb-linetco
Copy link
Author

If you need more information please let me know.

@kenyon
Copy link
Contributor

kenyon commented Oct 17, 2023

I think you are using a different module. There is no dockercompose type in this module.

@vb-linetco
Copy link
Author

vb-linetco commented Oct 18, 2023

I think you are using a different module. There is no dockercompose type in this module.

Yes you were right, we had another wrapper around docker_compose, I did not notice that, I've updated the setup

@kenyon
Copy link
Contributor

kenyon commented Oct 18, 2023

Puppet 5 is EOL, and v3.10.2 of this module is very old.

@vb-linetco
Copy link
Author

Puppet 5 is EOL, and v3.10.2 of this module is very old.

As i stated, a more recent version was behaving the same.

@vb-linetco
Copy link
Author

And the changed line that fixes the issue is the same for all affected version.

@vb-linetco
Copy link
Author

vb-linetco commented Oct 20, 2023

I'm not sure whether the issue is a bug or just requires an enhancement for supporting docker-compose > 2.8. One could check the version of docker-compose and use _ as a separator for docker-compose prior to 2.8 and - for >= 2.8

@kenyon
Copy link
Contributor

kenyon commented Oct 20, 2023

Sounds like this is a duplicate of #891.

@vb-linetco
Copy link
Author

Sounds like this is a duplicate of #891.

You are probably right on this, i did not notice that docker-compose-plugin is actually like docker-compose v2.

@beatreichenbach
Copy link

I still encounter this bug with v10.0.1 which uses the right docker compose.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants