如何在 microk8s 上修复 "Failed to pull image"
How to fix "Failed to pull image" on microk8s
我试图按照入门 docker 的教程进行操作,但是当您必须使用 kuberetes 时,我遇到了困难。我正在使用 microk8s 创建集群。
我的 Dockerfile:
FROM node:6.11.5WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . .
CMD [ "npm", "start" ]
我的bb.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: bb-demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
bb: web
template:
metadata:
labels:
bb: web
spec:
containers:
- name: bb-site
image: bulletinboard:1.0
---
apiVersion: v1
kind: Service
metadata:
name: bb-entrypoint
namespace: default
spec:
type: NodePort
selector:
bb: web
ports:
- port: 8080
targetPort: 8080
nodePort: 30001
我用
创建图像
docker image build -t bulletinboard:1.0 .
我使用以下方法创建 pod 和服务:
microk8s.kubectl apply -f bb.yaml
pod 已创建,但是,当我使用
查找 pods 的状态时
microk8s.kubectl get all
它说:
NAME READY STATUS RESTARTS AGE
pod/bb-demo-7ffb568776-6njfg 0/1 ImagePullBackOff 0 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/bb-entrypoint NodePort 10.152.183.2 <none> 8080:30001/TCP 11m
service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 4d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/bb-demo 0/1 1 0 11m
NAME DESIRED CURRENT READY AGE
replicaset.apps/bb-demo-7ffb568776 1 1 0 11m
此外,当我在 kubernetes 仪表板上查找它时,它说:
拉取镜像失败"bulletinboard:1.0":rpc错误:code = Unknown desc =解析镜像失败"docker.io/library/bulletinboard:1.0":没有可用的注册表端点:拉取访问被拒绝,存储库不存在或可能需要授权: 服务器消息: insufficient_scope: 授权失败
问:为什么会出现此错误?我只是按照教程没有跳过任何内容。
我已经用 docker 登录了。
您需要将此本地构建的映像推送到 Docker Hub 注册表。为此,如果您还没有 Docker Hub 帐户,则需要创建一个。
完成后,您需要从命令行登录 Docker Hub。
docker login
标记您的图像,以便它进入您的 Docker Hub 存储库。
docker tag bulletinboard:1.0 <your docker hub user>/bulletinboard:1.0
将您的图像推送到 Docker 集线器
docker push <your docker hub user>/bulletinboard:1.0
更新 yaml 文件以反映 Docker Hub 上的新图像存储库。
spec:
containers:
- name: bb-site
image: <your docker hub user>/bulletinboard:1.0
重新应用yaml文件
microk8s.kubectl apply -f bb.yaml
建议的解决方案是根据回答 here but this didn't work for me, so I followed this 指南将 imagePullPolicy: Never
添加到您的部署中,因为我从事本地开发工作。
如果您不想使用 Docker 集线器,您可以托管本地注册服务器。
- 启动本地注册表服务器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
- 标记你的图片:
sudo docker tag bulletinboard:1.0 localhost:5000/bulletinboard
- 将其推送到本地注册表:
sudo docker push localhost:5000/bulletinboard
- 更改
yaml
文件:
spec:
containers:
- name: bb-site
image: localhost:5000/bulletinboard
- 开始部署
kubectl apply -f bb.yaml
我试图按照入门 docker 的教程进行操作,但是当您必须使用 kuberetes 时,我遇到了困难。我正在使用 microk8s 创建集群。
我的 Dockerfile:
FROM node:6.11.5WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . .
CMD [ "npm", "start" ]
我的bb.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: bb-demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
bb: web
template:
metadata:
labels:
bb: web
spec:
containers:
- name: bb-site
image: bulletinboard:1.0
---
apiVersion: v1
kind: Service
metadata:
name: bb-entrypoint
namespace: default
spec:
type: NodePort
selector:
bb: web
ports:
- port: 8080
targetPort: 8080
nodePort: 30001
我用
创建图像docker image build -t bulletinboard:1.0 .
我使用以下方法创建 pod 和服务:
microk8s.kubectl apply -f bb.yaml
pod 已创建,但是,当我使用
查找 pods 的状态时microk8s.kubectl get all
它说:
NAME READY STATUS RESTARTS AGE
pod/bb-demo-7ffb568776-6njfg 0/1 ImagePullBackOff 0 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/bb-entrypoint NodePort 10.152.183.2 <none> 8080:30001/TCP 11m
service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 4d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/bb-demo 0/1 1 0 11m
NAME DESIRED CURRENT READY AGE
replicaset.apps/bb-demo-7ffb568776 1 1 0 11m
此外,当我在 kubernetes 仪表板上查找它时,它说:
拉取镜像失败"bulletinboard:1.0":rpc错误:code = Unknown desc =解析镜像失败"docker.io/library/bulletinboard:1.0":没有可用的注册表端点:拉取访问被拒绝,存储库不存在或可能需要授权: 服务器消息: insufficient_scope: 授权失败
问:为什么会出现此错误?我只是按照教程没有跳过任何内容。
我已经用 docker 登录了。
您需要将此本地构建的映像推送到 Docker Hub 注册表。为此,如果您还没有 Docker Hub 帐户,则需要创建一个。
完成后,您需要从命令行登录 Docker Hub。
docker login
标记您的图像,以便它进入您的 Docker Hub 存储库。
docker tag bulletinboard:1.0 <your docker hub user>/bulletinboard:1.0
将您的图像推送到 Docker 集线器
docker push <your docker hub user>/bulletinboard:1.0
更新 yaml 文件以反映 Docker Hub 上的新图像存储库。
spec:
containers:
- name: bb-site
image: <your docker hub user>/bulletinboard:1.0
重新应用yaml文件
microk8s.kubectl apply -f bb.yaml
建议的解决方案是根据回答 here but this didn't work for me, so I followed this 指南将 imagePullPolicy: Never
添加到您的部署中,因为我从事本地开发工作。
如果您不想使用 Docker 集线器,您可以托管本地注册服务器。
- 启动本地注册表服务器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
- 标记你的图片:
sudo docker tag bulletinboard:1.0 localhost:5000/bulletinboard
- 将其推送到本地注册表:
sudo docker push localhost:5000/bulletinboard
- 更改
yaml
文件:
spec:
containers:
- name: bb-site
image: localhost:5000/bulletinboard
- 开始部署
kubectl apply -f bb.yaml