Docker Swarm上のdocker runで認証付きリポジトリを使う

More than 3 years have passed since last update.

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.jsonX-Registry-Authを書いておく事で、実際にコンテナが作成されるホスト上だけでdocker pullが走るようです。

https://github.com/docker/swarm/blob/master/docs/api/swarm-api.md#registry-authentication