在堆栈部署上,无法固定图像以摘要:未经授权:客户端没有清单权限

问题描述 投票:0回答:3

我正在使用已推送到 Artifactory 存储库的自定义映像运行 Docker 堆栈。

docker-compose.yml:

version: "3"

services:
  app:
    image: repo.example.com/my_image:latest

我可以很好地拉取映像,并且可以很好地部署堆栈,但如果我尝试重新部署堆栈,则会收到错误。

$ docker stack deploy --with-registry-auth -c docker-compose.yml my_stack
Creating network my_stack_default
Creating service my_stack_app

$ docker stack deploy --with-registry-auth -c docker-compose.yml my_stack
Updating service my_stack_app (id: 8po6oepjdgo8kwsb7n4ig64dt)
unable to pin image repo.example.com/my_image:latest to digest: unauthorized: The client does not have permission for manifest

我希望 Docker 在我重新部署堆栈时更新映像,就像我使用 Docker Hub 中的映像一样。

我之前见过 Docker 说过

unable to pin image
,但那是当我没有指定存储库(例如 docker.io)时。我知道我已经获得了
repo.example.com
的许可,因为我将图像推到了那里,我仍然可以从中提取图像,并且可以启动堆栈。我只是无法更新。

这个

client does not have permission for manifest
错误是什么意思,如何解决这个问题?

docker artifactory docker-swarm docker-stack
3个回答
7
投票

如果您的所有权限均已获得批准,则问题可能是您的本地

.docker\config.json
文件尚未创建。

如果是这种情况,那么您可能需要在文件夹根目录的终端中运行此命令:

docker login repo.example.com

这将获取您的凭据并将其存储在未加密的

.docker\config.json
文件中。

之后您的部署应该可以工作(并且您可能需要考虑配置凭据助手以保证您的凭据安全)。


2
投票

问题是我们使用的是特定旧版本的 Docker Swarm(我认为是版本 13),该版本存在导致此错误的错误。我们仅限于该版本,因为当时的 RHEL7 仅限于该版本。使用 Ubuntu 并将 Docker 更新到更新版本解决了这个问题。


0
投票

这看起来像您的用户没有对此存储库的“删除/覆盖”权限。请要求您的 Artifactory 管理员将此权限添加到您的用户对此存储库的权限,然后重试。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.