Docker Swarm – 无法从私有registry中获取

我在Swarm集群上运行一个服务,感谢docker stack deploy --with-registry-auth和这个组合文件:

 version: "3.1" services: builder-consumer: image: us.gcr.io/my-gcloud-project/my/image:123 stop_grace_period: 30m volumes: - [...] environment: - [...] deploy: mode: global placement: constraints: - node.role == worker secrets: - [...] secrets: [...] 

这在我部署时工作正常,但是当我稍后向工作组添加工作节点时, 新工作人员无法拉出运行任务所需的映像 。 系统日志报告这个:

级别=错误信息msg =“请求错误之后没有继续提交:拒绝:请求\ / v2 / my-gcloud-project / my / image / manifests / 123 \”中的\ 123 \“权限被拒绝。 “

level = info msg =“Translating \”denied:根据请求\\“/ v2 / my-gcloud-project / my / image / manifests / 123 \\”拒绝\\“123 \\”的权限。 \“to \”版本库us.gcr.io/my-gcloud-project/my/image找不到:不存在或没有拉取权限\“”

level = error msg =“拉图失败”error =“repository us.gcr.io/my-gcloud-project/my/image not found:does not exist or no pull access”module =“node / agent / taskmanager”node .id = … service.id = … task.id = …

level = error msg =“致命任务错误”error =“没有这样的图像:us.gcr.io/my-gcloud-project/my/image:123@sha256:…”module =“node / agent / taskmanager” node.id = … service.id = … task.id = …

但是,当我手动在该机器上运行docker pull时,它工作正常,因为集群中的每台机器都通过了我的私人Google Registry的validation,这要归功于docker login

因此我的问题是:

  • 为什么添加的工人不能从私人registry中提取?
  • --with-registry-auth做了什么?

非常感谢

注意:节点运行Ubuntu 16.04.2 LTS,Docker版本是:

 Server: Version: 17.04.0-ce API version: 1.28 (minimum version 1.12) Go version: go1.7.5 Git commit: 4845c56 Built: Mon Apr 3 18:07:42 2017 OS/Arch: linux/amd64 Experimental: false 

在我的情况下,我没有使用“–with-registry-auth”运行堆栈,所以我放下实例,然后再次使用该选项重新启动pipe理器,现在可以运行