4

I am trying to deploy a docker swarm using Digital Ocean's docker-machine driver.

This is currently a single node that contains several public DockerHub images, and one private.

I am having difficulties in configuring it to accept the private image properly.

I have SSHed into the node, and used docker login. After that, I was able to properly docker pull the private image.

But, when trying to run docker stack deploy -c myapp.yml myapp, I am getting this warning:

image me/myapp:latest could not be accessed on a registry to record
its digest. Each node will access me/myapp:latest independently,
possibly leading to different nodes running different versions of the image.

What do I need to do to properly login to a private registry in docker swarm mode?

DannyB
  • 141
  • 1
  • 2

2 Answers2

3

You need the --with-registry-auth flag, e.g.:

docker stack deploy -c myapp.yml --with-registry-auth myapp

From the docker stack deploy --help output:

--with-registry-auth     Send registry authentication details to Swarm agents 
BMitch
  • 3,290
  • 9
  • 18
  • In case somebody wondered, the last arg is the swarm name (and not some authentication token or something); so more generically written the deployment takes form docker stack deploy -c docker-compose.yml --with-registry-auth my_swarm_name – P Marecki Jul 20 '21 at 06:06
  • 1
    @PMarecki it's the stack name, same as you'd include in a deploy command without the flag. The --with-registry-auth flag takes no options, it passes you local credentials from previous login commands to the nodes running the containers. – BMitch Jul 20 '21 at 11:03
0

first you need to do docker login to repo then you do stack deploy with --with-registry-auth flag.

KiranM
  • 1