When I run docker service create --mode global foo myrepo/foo-img:0.1, it works in that it starts the service, but if foo-img:0.1 does not exist on a node in the swarm, that node emits the following error:
<containerid> \_ foo myrepo/foo:0.1 <snip> "No such image: myrepo/foo-img:0.1"
If I pull myrepo/foo-img:0.1 on each node then it works fine.
Is there a workaround for this other than pulling the image on each node in the swarm?
The answer is actually pretty simple. Use the--with-registry-auth
parameter. This parameter uses the same authentication that is used for your current session. So, to make this work you simply:
# docker login -u xxx -pass yyy https://myrepo.com
# service create --with-registry-auth foo myrepo.com/foo-img:0.1
Assuming that you successfully logged in, the service will pull the image from the repo to each node as needed. Not sure exactly what happens behind the scenes, but it works for deploying to all nodes currently in the cluster! Thanks to the help from the folks at github/docker!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With