从我拥有的存储库中提取 Docker 映像时访问被拒绝

dsp*_*ejs 5 access-denied docker docker-registry

我构建了一个 Docker 映像,将其推送到我的帐户下的 Docker Hub,然后在本地删除。但是当我尝试拉它时,它会引发以下错误:

Error response from daemon: pull access denied for mightyspaj/dockerfile-assignment-1, repository does not exist or may require 'docker login'

我登录到拥有此图像存储库的同一帐户,并且可以完美地执行其他任务(例如推送)。该存储库也肯定存在于 Docker Hub 上,但是当我尝试拉取它时它失败了。

我尝试了以下几件事:

  1. 注销我的帐户并重新登录
  2. 重命名config.json和重新生成它
  3. 使用 运行隔离Docker容器docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock:ro docker sh,然后登录我的帐户并尝试拉取映像
  4. 删除和重新创建存储库

所有这些事情仍然会产生同样的错误。我很困惑。

请注意,我的客户端和引擎版本都是17.12.0-ce. 我的操作系统是 Ubuntu 17.10(64 位)。

控制台输出

docker login

-> % docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: mightyspaj
Password: 
Login Succeeded
Run Code Online (Sandbox Code Playgroud)

docker tag

-> % docker tag dockerfile-assignment-1:latest mightyspaj/dockerfile-assignment-1
Run Code Online (Sandbox Code Playgroud)

docker push

-> % docker push mightyspaj/dockerfile-assignment-1                              
The push refers to repository [docker.io/mightyspaj/dockerfile-assignment-1]
8427a8e6a29f: Pushed 
655a921743e8: Pushed 
8aa44edb7524: Pushed 
60f1a2dc4cd8: Mounted from library/node 
9185fe936b87: Mounted from library/node 
e53f74215d12: Mounted from library/node 
latest: digest: sha256:6c68220ba84f13d0229ef4458f22369410bb98764b908a75be0849c3003de160 size: 1582
Run Code Online (Sandbox Code Playgroud)

docker image rm

-> % docker image rm mightyspaj/dockerfile-assignment-1
Untagged: mightyspaj/dockerfile-assignment-1:latest
Untagged: mightyspaj/dockerfile-assignment-1@sha256:6c68220ba84f13d0229ef4458f22369410bb98764b908a75be0849c3003de160
Run Code Online (Sandbox Code Playgroud)

docker image pull

-> % docker image pull mightyspaj/dockerfile-assignment-1
Using default tag: latest
Error response from daemon: pull access denied for mightyspaj/dockerfile-assignment-1, repository does not exist or may require 'docker login'
Run Code Online (Sandbox Code Playgroud)

nix*_*nix -3

该解决方案仅在私有 docker 存储库上有效!

首先尝试登录您的私人存储库,例如:

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

然后,如果您基于私有存储库中的镜像使用dockerfile 构建新镜像,则必须在基础镜像上添加私有存储库 url 前缀:

来自PRIVATE_REPO_URL + IMAGE_INFO

样本:

PRIVATE_REPO_URL --> dockerrepo.example.com
BASE_IMAGE --> samples/java/jdk:1.6
Run Code Online (Sandbox Code Playgroud)

你的 dockerfile 看起来像这样:

FROM dockerrepo.example.com/samples/java/jdk:1.6
Run Code Online (Sandbox Code Playgroud)