3

我使用“jenkins-1-centos7”映像部署在我的 openshift 中以在我的 jenkins 映像上运行项目。它成功运行,经过多次配置,我从这个 jenkins 容器中复制了一个新图像。现在我想使用这个镜像作为进一步开发的基础,但是在这个镜像上部署一个 pod 失败并出现错误“ErrImagePull”。

在我的调查中,我发现 openshift 需要镜像存在于 docker 注册表中才能成功部署 pod。我为 docker 注册表部署了另一个应用程序,现在当我尝试将更新的图像推送到此 docker 注册表时,它失败并显示消息"authentication required"。我已向我的用户授予管理员权限。

docker push <local-ip>:5000/openshift/<new-updated-image>
The push refers to a repository [<local-ip>:5000/openshift/<new-updated-image>] (len: 1)
c014669e27a0: Preparing
unauthorized: authentication required

如何确保修改后的映像部署成功?

4

2 回答 2

1

可能这个答案需要编辑,因为您的问题可能是由很多事情引起的。(我假设您使用的是 OpenShift 起源?(开源))。因为我看到了 Jenkins 的 Centos7 映像。

首先,您需要在默认项目中部署 openshift 注册表。

$ oc project default
$ oadm registry --config=/etc/origin/master/admin.kubeconfig \
    --service-account=registry  

将部署一个注册表 pod。在注册表上方将创建一个服务(一种端点,将在您的 pod 上方充当负载均衡器)。

该服务的 IP 在172.30范围内。您可以在 webconsole 中检查此 IP 或执行(假设您仍在默认项目中): $ oc get svc

NAME              CLUSTER-IP      EXTERNAL-IP   PORT(S)                   AGE
docker-registry   172.30.22.11   <none>        5000/TCP                  8d
kubernetes        172.30.32.13      <none>        443/TCP,53/UDP,53/TCP     9d
router            172.30.42.42    <none>        80/TCP,443/TCP,1936/TCP   9d

因此,您需要使用 docker-registry 的服务 IP 进行身份验证。您还需要一个令牌:

$ oc whoami -t
D_OPnWLdgEbiKJzvG1fm9dYdX..

现在您可以执行登录并推送图像:

$ docker login -u admin -e any@mail.com \
-p D_OPnWLdgEbiKJzvG1fm9dYdX 172.30.22.11:5000
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded

$ docker tag myimage:latest 172.30.22.11/my-proj/myimage:latest

$ docker push 172.30.22.11/my-proj/myimage:latest

希望这可以帮助。您可以对此答案提供一些反馈,并判断它是否适合您或您面临哪些新问题。

于 2016-07-28T09:40:10.370 回答
0

一切都很好,只有最后一行出现身份验证错误

码头工人推 172.30.22.11/my-proj/myimage:latest

于 2016-08-01T12:55:54.100 回答