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