docker-install icon indicating copy to clipboard operation
docker-install copied to clipboard

docker compose pull won't refresh images with :latest tag

Open ildella opened this issue 2 years ago • 0 comments

Situation

A simple docker + compose lifecycle. I already have a docker compose up running with that very service. I want to update it.

docker build . -t localhost:5000/my-service:latest --load
docker push localhost:5000/my-service:latest

What happens

Without the --load nothing will happen. Nothing is built, nothing pushed, and the registry will have the same image as before. If I do --load, what happen is that my docker images goes from this:

localhost:5000/my-service   latest                         f06b80c781bf  

to this:

localhost:5000/my-service   latest                         c2698fdb10ea   
localhost:5000/my-service   <none>                         f06b80c781bf 

This is a little confusing, especially as I use the --load as the build command did advice it, but it's not even documented.. https://docs.docker.com/engine/reference/commandline/build/

What happens

I run

docker compose pull
docker compose restart my-service

But then the old version is running. Pull had no effect at all. In fact a docker ps will show me

842c2c85820d   f06b80c781bf                        Up 4 minutes (unhealthy)    

So now the service is unhealthy and does not have a name anymore. This is despite I can use it properly...

So in the end, this method makes a lot of confusion and is unreliable.

What I expect

I expect a simple build (without --load) and push will always override the existing image by default, or at least I can have a --force option in the push. This should be the default behavior for the :latest tag.

Then I expect docker compose pull to download the latest version on the repo. Finally, but that's probably what's happening, the docker compose restart service to restart the latest images pulled by the composer.

Even better:

docker compose restart service --force-pull

or even better

services:
  datalake:
    image: 'localhost:5000/my-service:latest'
    pull: 'always'

ildella avatar Jul 23 '23 15:07 ildella