My docker image doesn’t ever change, only the artifact that the image pulls from nexus changes. When I specify:
docker service update service-name
nothing happens, but if I change the image tag like so:
docker service update --image new-image service-name
things magically update. I’m guessing the fact that the image doesn’t change it’s not performing a rolling update. Is there anyway to force the update to happen even if nothing on the service itself has been modified? Because indeed in my case something has changed, but it is obscured from docker itself. This seems like an obvious use case during development phases where you always want to use the :latest tag.
I’m facing the same issue here.
I want to update using the :latest tag and I can’t do it each time, because it won’t pull the new image since it’s the service is running with the same tag.
However I’ve noticed I can do the following thing:
docker service create service-name
and update (but only once because it’s not the same tag) with docker service update service-name:latest
Is there any way of updating the service with the latest tag multiple times (taking into account that the image on the docker registry was updated) ?
I have found a work-around for this issue, and should have posted it as soon as I found it, sorry about that. In my case I am using Jenkins to perform a Continuous Delivery rolling update by issuing the command:
docker service update service-name
But like we discussed this doesn’t pick up any changes and just aborts the rolling update. So what I did to get around this was add a dynamic environment variable to the rolling update. I didn’t want the environment variable to be completely useless so I used something that might provide useful in the future which was Jenkins Build information. So the final command looks something like:
(based on your rc version it may be --env or --env-add)
docker service update --env "JENKINS_META=$JOB_NAME[$BUILD_NUMBER]" service_name
if you aren’t using jenkins you can do something similar with just the date like so:
docker service update --env "UPDATE_DATE=$(date)" service_name
Thanks Matt!
This definitely helps.
I used the same workaround but for the docker build. It resolved in a new version tag at each new commit on master branch. I did not like to make a new tag for each commit. That was a bit messy.
I’ll implement your solution I think.
Thanks again !
docker service update --image $IMAGENAME:latest
and docker service update --image $IMAGENAME
to achieve an image update. I think docker should check the image hash and preform an update if the :latest Image is newer than the running once.
I`ll try the environment “trick”
EDIT:
the command is --env-add in docker 1.12.3 for the docker service update