我正在使用已推送到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 管理员将此权限添加到此存储库的用户,然后重试。
希望这有帮助!