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

在我的调查中,我发现openshift需要该映像出现在docker注册表中才能成功部署Pod。
我为Docker注册表部署了另一个应用程序,现在当我尝试将更新的映像推送到此Docker注册表中时,它失败,并显示消息“需要身份验证”。
我已经为我的用户赋予了管理员权限。

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


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

最佳答案

此答案可能需要修改,因为您的问题可能是由很多原因引起的。 (我假设您使用的是OpenShift起源?(开源))。因为我看到了詹金斯的Centos7图像。

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

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


将部署注册表窗格。在注册表上方将创建一个服务(某种端点,将充当吊舱上方的负载平衡器)。

该服务的IP在172.30范围内。
您可以在网络控制台中检查此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


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

关于jenkins - 在openshift中部署修改后的Jenkins镜像失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38572097/

10-16 18:15