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

jpy*_*ams 11 artifactory docker docker-swarm docker-stack

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

docker-compose.yml:

version: "3"

services:
  app:
    image: repo.example.com/my_image:latest
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

此错误意味着什么client does not have permission for manifest?如何解决此问题?

小智 7

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

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

docker login repo.example.com
Run Code Online (Sandbox Code Playgroud)

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

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


jpy*_*ams 2

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