docker/libcompose

compose Up fails trying to recreate containers when not needed

lucacome opened this issue · 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?

I can confirm this was introduced by this commit:
f5c34b0

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.

Is anything happening about this?

@lucacome This issue is due to the problem from L331-L347 in this file

c, err = s.recreateIfNeeded(ctx, c, options.NoRecreate, options.ForceRecreate)
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.