6

我正在 Swarm 集群上运行一项服务,这要归功于docker stack deploy --with-registry-auth这个 compose 文件:

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:
  [...]

这在我部署时工作正常,但是当我稍后将工作节点添加到集群时,新工作人员无法提取运行任务所需的映像。系统日志报告:

level=error msg="错误后不继续拉取:拒绝:来自请求 \"/v2/my-gcloud-project/my/image/manifests/123\" 的权限被拒绝 \123\"。"

level=info msg="Translating \"denied: Permission denied for \\"123\\" from request \\"/v2/my-gcloud-project/my/image/manifests/123\\". \" 到 \"存储库 us.gcr.io/my-gcloud-project/my/image not found: 不存在或没有拉取访问权限\""

level=error msg="pulling image failed" error="repository us.gcr.io/my-gcloud-project/my/image not found: 不存在或没有 pull access" module="node/agent/taskmanager" 节点.id=...服务.id=...任务.id=...

level=error msg="fatal task error" error="No such image: us.gcr.io/my-gcloud-project/my/image:123@sha256:..." module="node/agent/taskmanager" node.id=... service.id=... task.id=...

但是,当我在该机器上手动运行docker pull时,它工作正常,因为集群中的每台机器都通过了我的私有 Google 注册表的身份验证,这要感谢docker login.

因此我的问题是:

  • 为什么添加的工作人员不能从私有注册表中提取?
  • 具体做什么--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
4

1 回答 1

2

在我的情况下,我没有使用“--with-registry-auth”运行堆栈,所以我关闭了实例,并使用该选项再次启动了管理器,现在它可以工作了

于 2017-05-18T13:19:45.247 回答