OpenShift4 CRC报ImagePullBackOff 无法拉取本地HTTP Docker镜像如何解决
OpenShift CRC环境拉取本地HTTP非安全镜像仓库配置方案
CRC默认会拦截所有HTTP协议的镜像仓库请求,只允许HTTPS协议的仓库拉取镜像,按以下步骤配置即可解决:
- 第一步:配置CRC层面的非安全仓库白名单
在宿主机执行以下命令,将你的本地仓库地址加入白名单:
如果后续你用CRC默认的宿主机域名访问本地服务,建议一并把crc config set insecure-registry some-interal-regsitry:5000host.crc.testing:5000也加入白名单,避免后续解析问题:
配置完成后重启CRC加载配置:crc config set insecure-registry host.crc.testing:5000crc stop && crc start - 第二步:校验集群级镜像策略配置
CRC启动完成后,用oc登录集群,检查全局镜像配置是否已经同步了刚才的非安全仓库设置:
查看返回结果中oc get image.config.openshift.io/cluster -o yamlspec.registrySources.insecureRegistries字段,如果没有你配置的仓库地址,直接执行编辑命令手动补充:
在对应位置添加仓库地址即可,配置示例:oc edit image.config.openshift.io/cluster
保存后配置会自动下发到所有集群节点,无需手动重启节点服务。spec: registrySources: insecureRegistries: - some-interal-regsitry:5000 - host.crc.testing:5000 - 第三步:解决镜像仓库网络可达问题
绝大多数配置完白名单仍然拉取失败的场景,都是网络路由问题:- 不要在Pod镜像地址里写
localhost:5000或者127.0.0.1:5000,这个地址在CRC虚拟机内部指向的是虚拟机自身,不是你的物理宿主机 - CRC默认内置了宿主机的域名解析
host.crc.testing,直接把本地镜像重新打标签为host.crc.testing:5000/my-image,推到本地Docker daemon启动的registry之后,Deployment里的镜像地址也替换成这个地址即可
- 不要在Pod镜像地址里写
- 第四步:重新触发镜像拉取
所有配置完成后,重启对应工作负载即可重新拉取镜像:oc rollout restart deployment/<你的工作负载名称>
注意:不要手动登录CRC节点修改
/etc/containers/registries.conf文件,CRC虚拟机重启后所有手动修改的节点本地配置都会被重置,只有通过crc config或者集群全局image.config资源做的配置可以持久生效。
内容的提问来源于stack exchange,提问作者WesternGun
相关产品推荐
相关产品推荐

