libcompose icon indicating copy to clipboard operation
libcompose copied to clipboard

compose Up fails trying to recreate containers when not needed

Open lucacome opened this issue 8 years ago • 6 comments

I can't seem to find a way to replicate the behavior of docker-compose up -d, where if the container has not changed, nothing happens. Instead, I get: ERRO[0006] Failed to start: rethinkdb : Error response from daemon: endpoint with name rethinkdb already exists in network ubuntu_default

Am I doing something wrong?

lucacome avatar Sep 18 '17 20:09 lucacome

I'm guessing it's because of this set to true: https://github.com/docker/libcompose/blob/master/docker/service/service.go#L242

lucacome avatar Sep 19 '17 16:09 lucacome

I can confirm this was introduced by this commit: https://github.com/docker/libcompose/commit/f5c34b0a35164a0f6d8b861df32b2e4e54deb847

vito-c avatar Sep 28 '17 18:09 vito-c

@xihan88

vito-c avatar Sep 29 '17 06:09 vito-c

Simple Expected Example with docker compose:

---
version: '2'
services:
    test.svr:
        container_name: test.svr
        image: alpine:latest
        command: sleep 10000
$ docker-compose up -d
Creating network "foo_default" with the default driver
Creating test.svr ...
Creating test.svr ... done
$ docker-compose up -d
test.svr is up-to-date

Then make a change to the compose file ports ["8080:8080"] for example

$ docker-compose up -d
Recreating test.svr ...
Recreating test.svr ... done

Libcompose is no longer following this behavior it is now barfing out an error on second up.

vito-c avatar Sep 29 '17 06:09 vito-c

Is anything happening about this?

lucacome avatar Dec 20 '17 09:12 lucacome

@lucacome This issue is due to the problem from L331-L347 in this file https://github.com/docker/libcompose/blob/57bd716502dcbe1799f026148016022b0f3b989c/docker/service/service.go#L331 because if a container is not recreated, it shouldn't be connecting to the previous network and starting again. I will make a simple fix for it. @vito-c In the previous version before my PR, a service will always be recreated (because of hashing an array of addresses) hence this issue won't show itself. I'm glad it brings out this important bug.

xhanio avatar Jan 24 '18 00:01 xhanio