在堆栈部署时,无法将映像固定到摘要:未经授权:客户端没有清单权限



我正在使用已推送到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 Swarm(我认为版本 13(,该版本有一个导致此错误的错误。 我们仅限于该版本,因为当时的RHEL7仅限于该版本。 使用 Ubuntu 并将 Docker 更新到更新的版本解决了这个问题。

如果您的所有权限都已获得批准,则问题可能是您的本地 .docker\config.json 文件尚未创建。

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

码头工人登录 repo.example.com

这将获取您的凭据并将其存储在未加密的 .docker\config.json 文件中。

之后,部署应该可以正常工作(您可能需要考虑配置凭据帮助程序以确保凭据安全(

看起来您的用户没有此存储库的"删除/覆盖"权限。请让您的 Artifactory 管理员将此权限添加到此存储库的用户,然后重试。

希望这有帮助!

最新更新