how to get docker-compose to use the latest image from repository
in order to make sure, that you are using the latest version for your :latest
tag from your registry (e.g. docker hub) you need to also pull the latest tag again. in case it changed, the diff will be downloaded and started when you docker-compose up
again.
so this would be the way to go:
docker-compose stop
docker-compose rm -f
docker-compose pull
docker-compose up -d
i glued this into an image that i run to start docker-compose and make sure images stay up-to-date: https://hub.docker.com/r/stephanlindauer/docker-compose-updater/
To get the latest images use docker-compose build --pull
I use below command which is really 3 in 1
docker-compose down && docker-compose build --pull && docker-compose up -d
This command will stop the services, pulls the latest image and then starts the services.
[EDIT] DO NOT USE
The below is in the spec but, as pointed out in the comments, has not been implemented yet (docker-compose 1.29.2 and 2).
Since 2020-05-07, the docker-compose spec also defines the "pull_policy" property for a service:
version: '3.7'
services:
my-service:
image: someimage/somewhere
pull_policy: always
The docker-compose spec says:
pull_policy defines the decisions Compose implementations will make when it starts to pull images.
Possible values are (tl;dr, check spec for more details):
- always: always pull
- never: don't pull (breaks if the image can not be found)
- missing: pulls if the image is not cached
- build: always build or rebuild
To close this question, what seemed to have worked is indeed running
docker-compose stop
docker-compose rm -f
docker-compose -f docker-compose.yml up -d
I.e. remove the containers before running up
again.
What one needs to keep in mind when doing it like this is that data volume containers are removed as well if you just run rm -f
. In order to prevent that I specify explicitly each container to remove:
docker-compose rm -f application nginx php
As I said in my question, I don't know if this is the correct process. But this seems to work for our use case, so until we find a better solution we'll roll with this one.
I use the following even if my container is running and it updates just fine.
docker-compose pull
docker-compose up -d