dockerのimageを認証付きのリポジトリに置いている場合、docker swarm上でdocker runをすると、以下のエラーを吐いてdocker pullをしてくれません。これは、docker login quay.ioをしていても同じです。
※今回はquay.ioを例に進めます。
$ docker run quay.io/my/repository
Error response from daemon: Error: Status 403 trying to pull repository my/repository: "{\"error\": \"Permission Denied\"}"
通常のDocker Engine上ではdocker login quay.ioでログインした後、docker run quay.io/my/repositoryをするとimageが手元になければ勝手にdocker pullして引っ張ってきてくれます。
swarm上でdocker pull quay.io/my/repositoryとすれば、pull自体はできるのですが、クラスタ内の全てのマシンでdocker pullが走ってしまいます。
この問題が、swarm:1.1.0では修正されたようです。
https://github.com/docker/swarm/releases
~/.docker/config.jsonにX-Registry-Authを書いておく事で、実際にコンテナが作成されるホスト上だけでdocker pullが走るようです。
https://github.com/docker/swarm/blob/master/docs/api/swarm-api.md#registry-authentication