I’m struggling to understand what actually happens when I’m overriding services in docker-compose.
I’m talking about situation in which I have docker-compose.yml and docker-compose-dev.yml present.
I’m running like this: docker-compose -f docker-compose.yml -f docker-compose-dev.yml run hello
# Dockerfile
FROM library/hello-world
ADD this-file-dos-not-exist /var
# docker-compose.yml
version: '2'
services:
hello:
build: .
# docker-compose-dev.yml
version: '2'
services:
hello:
image: library/hello-world
What I expected to happen was that docker-compose will run hello services based on image from docker-compose-dev.yml. What actually happens is that docker-compose for no reason tries to build image based instructions from docker-compose.yml (it will not use this image to run hello service anyway):
$ docker-compose -f docker-compose.yml -f docker-compose-dev.yml run hello
Creating network "tmp_default" with the default driver
Building hello
Step 1/2 : FROM library/hello-world
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
---> 48b5124b2768
Step 2/2 : ADD this-file-dos-not-exist /var
ERROR: Service 'hello' failed to build: lstat this-file-dos-not-exist: no such file or directory
So why this is being built if it’s not going to be used?
In my case this is really problematic because on first run dev has to wait a lot for no reason for image to be build.
What I’d expect is that if service is overridden in following docker-compose-* file only new image will be downloaded.
Am I missing something here?