当前位置: 首页 > 知识库问答 >
问题:

K8s容器不启动ImagePullBackOff,ErrImagePull

巫欣荣
2023-03-14

我试图使用k8s在本地启动几个容器,但是由于ImagePullBackOff,ErrImagePull,容器创建停止了。yaml很好,已在另一台工作站上测试过。我可以用普通的docker提取图像。但在k8s/minikube环境下失败

错误:容器日志为

Error from server (BadRequest): container "mongo-express" in pod "mongoexpress-deployment-bd7cf697b-nc4h5" is waiting to start: trying and failing to pull image

minikube仪表板中的错误是

Failed to pull image "docker.io/mongo": rpc error: code = Unknown desc = Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 

我尝试将图像拉到本地docker缓存并运行

eval $(minikube docker-env)

但我一直得到这个错误。它看不到本地映像存储库,也不会自行加载映像。

我100%肯定这与Fedora上的用户访问有关。但是我不知道该怎么办,我已经试着解决这个问题好几天了。

请帮忙,谢谢

不知道这是否有帮助:我尝试使用k3s。图像拉取成功,但minikube与Fedora上的它不兼容。

另外……如果我尝试在没有sudo的情况下使用docker,它不会拉取图像。使用sudo它会拉取。

操作系统是Fedora,我使用docker、kubernetes、minikube和podman作为驱动程序。

- linux version
NAME="Fedora Linux"
VERSION="35 (Workstation Edition)"
- kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", 
- docker version
Version:          20.10.12
- minikube version
minikube version: v1.25.2

我正在尝试在本地启动这个yaml文件

apiVersion: v1
kind: Secret
metadata:
  name: mongodb-secret
type: Opaque
data:
  mongo-root-username: dXNlcm5hbWU=
  mongo-root-password: cGFzc3dvcmQ=
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mongodb-configmap
data:
  database_url: mongodb-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongoexpress-deployment
  labels:
    app: mongoexpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongoexpress
  template:
    metadata:
      labels:
        app: mongoexpress
    spec:
      containers:
        - name: mongo-express
          image: mongo-express
          ports:
            - containerPort: 8081
          env:
            - name: ME_CONFIG_MONGODB_ADMINUSERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-username
            - name: ME_CONFIG_MONGODB_ADMINPASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-password
            - name: ME_CONFIG_MONGODB_SERVER
              valueFrom:
                configMapKeyRef:
                  name: mongodb-configmap
                  key: database_url
            - name: WHATEVER
              value: Someconfig
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-deployment
  labels:
    app: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongodb
          image: mongo
          ports:
            - containerPort: 27017
          env:
            - name: MONGO_INITDB_ROOT_USERNAME
              valueFrom:
                  secretKeyRef:
                    name: mongodb-secret
                    key: mongo-root-username
            - name: MONGO_INITDB_ROOT_PASSWORD
              valueFrom:
                  secretKeyRef:
                    name: mongodb-secret
                    key: mongo-root-password
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-service
spec:
  selector:
    app: mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017
---
apiVersion: v1
kind: Service
metadata:
  name: mongoexpress-service
spec:
  selector:
    app: mongoexpress-deployment
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 30000

共有3个答案

戚俊美
2023-03-14

请仔细检查您是否输入了错误的图像路径。

当镜像路径不正确、网络出现故障或 kubelet 无法通过容器注册表进行身份验证时,会发生镜像切换错误。Kubernetes最初抛出错误图像脉冲错误,然后在重试几次后,“撤回”并计划另一次下载尝试。

当无法从注册表中提取图像时,ImagePullback错误。出现此错误的原因可能是找不到映像,或者您的节点没有从注册表中提取的权限。

皇甫喜
2023-03-14

这是该问题的一种解决方法,如果您可以使用docker pull提取图像,然后在所有worker节点上进行提取,然后添加一个

图片来源政策:如果不存在

在您提到图像名称的yamls内部,k8s将首先检查机器内部是否存在图像名称,如果是,则直接使用图像名称

秦新立
2023-03-14

基于这些评论,我的建议是使用docker驱动程序,因为docker已经安装在系统中,是首选的稳定驱动程序。

minikube start --driver=docker

您还可以将其设置为默认驱动程序

minikube config set driver docker
minikube start

不过,这并不能解释为什么它对波德曼不起作用。

 类似资料:
  • 问题内容: 我使用以下命令创建了容器: 以下是命令: 真的没有太多要说的,我希望容器能启动并保持正常运行。这是日志: 问题答案: 您正在尝试运行,它是需要tty 才能运行的交互式外壳。使用,在“分离”模式下运行此命令实际上没有任何意义,但是您可以通过添加到命令行来做到这一点,以确保容器具有与其关联的有效tty并保持连接状态: 在启动分离的容器时,您通常会运行某种长期存在的非交互式进程(例如,或We

  • 我今天使用应用程序容器/媒体维基泊出程序映像部署了MediaWiki的一个实例,我现在遇到了一个新问题,我找不到任何线索。尝试使用以下命令附加到媒体维基前端容器后: 由于我忽略的原因,它在我的配置中回答< code >终止,并尝试: 我确实收到了一些接近错误消息的内容: 这是我的新问题,因为这个容器永远不会停止重新启动。我可以看到,使用<code>docker ps-a。 问题是,我能够停止容器(

  • 我们最近升级到k8s版本1.20.9,不确定这是否是根本原因,但SCDF服务器pod未能出现以下错误。 我通常使用基于kubectl的部署来部署scdf服务器。 有人知道吗?以下附加错误。 2022-01-05 05:08:56.207信息1---[main]o.a.coyote.http11.Http11NioProtocol:Starting ProtocolHandler[“http-nio

  • 我通过C API使用LXC,并简单地复制和粘贴了示例代码(如链接所示,但用我自己的函数名替换了)。然后从程序中的另一个代码块中调用它,我无法使容器正常启动。 调用只会返回false。如果我将第二个参数更改为start为0(意味着应该使用而不是/sbin/init),则start“成功”,但容器状态立即设置为,因此我无法连接到容器。 正在尝试通过设置获取日志: 只生成空文件。 想到这可能与我看到的另

  • 我有一个Ubuntu Xenial容器,在我的Arch Linux计算机上安装了amd64体系结构。容器工作正常。但是,当我第二次尝试启动容器时,出现以下错误: 容器启动失败。 要获得更多详细信息,请在前台模式下运行容器。 其他信息可以通过设置--logfile和--log优先级选项获得。 是什么原因造成的? 在使用-F、-logfile和--logpriority选项运行后得到了这个。 lxc开

  • 我想做的是,在运行compose up之后,在我的web本地主机中看到一个简单的html文件。但我在localhost的8080 8000 8009端口中看不到任何东西。 当我将yml更改为 上面写着 caner@vegan:~/ideaprojects/combabety$pwd/home/caner/ideaprojects/combabety$ls docker-compose.yml ht