dockerdocker-composedocker-swarmdocker-stack

docker stack deploy results in "No such image error"


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.


Solution

  • 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/