docker stack deploy results in “No such image erro

2020-06-30 15:56发布

问题:

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.

回答1:

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/



回答2:

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 with docker-compose.

I did try changing the nameserver to 8.8.8.8 in resolv.conf in my VMs, but issue was not resolved.