在 openshift 中部署修改后的 Jenkins 镜像失败
Deploying a modified Jenkins image in openshift fails
我使用 "jenkins-1-centos7" 图像在我的 openshift 中部署到我的 jenkins 图像上的 运行 项目。
它成功运行,经过多次配置后,我从这个 jenkins 容器中复制了一个新图像。
现在我想使用这个图像作为进一步开发的基础,但是将 pod 部署到这个图像失败并出现错误 "ErrImagePull".
根据我的调查,我发现 openshift 需要图像出现在 docker 注册表中才能成功部署 pods。
我为 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
如何确保修改后的镜像部署成功?
这个答案可能需要修改,因为您的问题可能是由很多原因引起的。 (我假设您使用的是 OpenShift origin?(开源))。因为我看到了Jenkins的Centos7镜像。
首先,您需要在默认项目中部署 openshift 注册表。
$ oc project default
$ oadm registry --config=/etc/origin/master/admin.kubeconfig \
--service-account=registry
将部署注册表 pod。在注册表上方将创建一个服务(一种端点,它将在您的 pods 上方充当负载均衡器)。
此服务的 IP 地址在 172.30
范围内。
您可以在 webconsole 中查看此 IP 或执行(假设您仍在默认项目中):
$ oc 获取 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
希望这对您有所帮助。您可以对此答案提供一些反馈,并判断它是否适合您或您面临哪些新问题。
一切正常,只有最后一行出现身份验证错误
docker 推送 172.30.22.11/my-proj/myimage:最新
我使用 "jenkins-1-centos7" 图像在我的 openshift 中部署到我的 jenkins 图像上的 运行 项目。 它成功运行,经过多次配置后,我从这个 jenkins 容器中复制了一个新图像。 现在我想使用这个图像作为进一步开发的基础,但是将 pod 部署到这个图像失败并出现错误 "ErrImagePull".
根据我的调查,我发现 openshift 需要图像出现在 docker 注册表中才能成功部署 pods。 我为 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
如何确保修改后的镜像部署成功?
这个答案可能需要修改,因为您的问题可能是由很多原因引起的。 (我假设您使用的是 OpenShift origin?(开源))。因为我看到了Jenkins的Centos7镜像。
首先,您需要在默认项目中部署 openshift 注册表。
$ oc project default
$ oadm registry --config=/etc/origin/master/admin.kubeconfig \
--service-account=registry
将部署注册表 pod。在注册表上方将创建一个服务(一种端点,它将在您的 pods 上方充当负载均衡器)。
此服务的 IP 地址在 172.30
范围内。
您可以在 webconsole 中查看此 IP 或执行(假设您仍在默认项目中):
$ oc 获取 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
希望这对您有所帮助。您可以对此答案提供一些反馈,并判断它是否适合您或您面临哪些新问题。
一切正常,只有最后一行出现身份验证错误
docker 推送 172.30.22.11/my-proj/myimage:最新