Kubernetes部署私有Docker Registry镜像的正确路径格式是什么?
私有Docker Registry镜像拉取路径格式要求
私有镜像的完整路径需要严格遵循 <私有Registry访问地址[:端口]>/<命名空间/镜像名>:<标签> 格式,和Docker Hub的路径规则唯一的区别是前缀替换为你自己的私有仓库地址:
- 如果你的私有仓库对外访问地址是
192.168.1.100:5000,那你示例镜像的完整路径为192.168.1.100:5000/summer/my-app:version1.1 - 如果私有仓库用的是HTTP协议未配置HTTPS证书,需要提前在所有K8s节点的容器运行时(Docker/Containerd)配置中把该仓库地址加入不安全仓库列表,否则运行时会默认拒绝HTTP协议的镜像拉取请求
必须配套配置:镜像拉取凭证
仅路径格式正确大概率还是会出现ImagePullBackOff错误,因为K8s默认没有私有仓库的访问权限,需要提前配置访问凭证:
- 先在对应命名空间下创建存储私有仓库凭证的Secret:
kubectl create secret docker-registry regcred \ --docker-server=<替换为你的私有Registry访问地址,比如192.168.1.100:5000> \ --docker-username=<私有仓库登录用户名> \ --docker-password=<私有仓库登录密码>
- 在Deployment配置中添加
imagePullSecrets字段关联刚才创建的凭证,参考配置如下:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app-deployment spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: # 关联私有仓库拉取凭证 imagePullSecrets: - name: regcred containers: - name: my-app # 替换为你的私有镜像完整路径 image: 192.168.1.100:5000/summer/my-app:version1.1 ports: - containerPort: 80
快速排查步骤
如果配置完成后还是拉取失败,可以按顺序排查:
- 登录任意一台K8s工作节点,手动执行
docker pull <完整镜像路径>,确认网络连通、凭证正确、镜像确实存在 - 确认Secret和Deployment在同一个命名空间下,Secret不支持跨命名空间使用
- 如果你使用Containerd作为容器运行时,需要单独在Containerd配置中添加私有仓库相关配置,和Docker配置不通用
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

