我正在 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