I am using docker swarm and would like to deploy a service with docker-compose
. My service uses a custom image called myuser/myrepo:mytag
that I successfully deploy to Docker-Hub to a private repository.
My docker-compose looks like this:
version: "3.3"
services:
myservice:
image: myuser/myrepo:mytag
ports:
- "8080:8080"
Before executing, I successfully pulled the image with: docker pull myuser/myrepo:mytag
When I run docker stack deploy -c docker-compose.yml myapp
I always receive the error: "No such image: myuser/myrepo:mytag"
.
Interestingly, running the same file using only: docker-compose up
(i.e. without swarm mode) everything works fine and the service starts up.
I really don't understand why this is failing?
I've already tried cleaning up docker with docker system prune
and then repull my image, no success.
I had similar issue on mac when behind the corporate firewall.
I was able to resolve only after connecting directly to internet.
Just to update, while I am on VPN, I am able to access the internet without any proxy settings, and am able to download (docker) images just fine with
docker run
. Issue is only withdocker-compose
.I did try changing the nameserver to 8.8.8.8 in resolv.conf in my VMs, but issue was not resolved.
Already found the solution. My image is hosted on a private repository. Besides the swarm manager (where I executed the commands), I had a running swarm worker.
When I ran
docker stack deploy -c docker-compose.yml myapp
docker deployed the service to the worker node (not the manager node as I thought). At the worker node, docker had no credentials to pull the image from the private repository. Hence, to fix this either pass the flag--with-registry-auth
(which pushes the credentials for the repository to the worker node) or make sure that the service is deployed to a node where the image is present.See: https://docs.docker.com/engine/reference/commandline/deploy/