【问题标题】:kubernetes failed to start pod due to ContainerCannotRun由于 ContainerCannotRun,kubernetes 无法启动 pod
【发布时间】:2019-10-24 08:08:09
【问题描述】:

我是 Kubernetes 新手。最近建立了 1 个主节点和 1 个节点的 Kubernetes 集群。

我可以通过运行来启动一个 docker 容器 sudo docker run <docker-image> 在我的节点机器中。

但我未能使用 kubernetes yml 文件将 docker 容器作为 pod 启动。 通过运行sudo kubectl create -f deployment.yml

我描述了 pod 信息并看到了这个错误消息。

      Last State:   Terminated
      Reason:       ContainerCannotRun
      Message:      OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"HOSTNAME\": executable file not found in $PATH": unknown
      Exit Code:    128

docker 容器应该启动一个 java 可执行文件。 这是我的部署文件

kind: Service
apiVersion: v1
metadata:
  name: service1-service
spec:
  selector:
    app: service1
  ports:
    - protocol: "TCP"
      # Port accessible inside cluster
      port: 26666
      # Port to forward to inside the pod
      targetPort: 26666
      # Port accessible outside cluster
      nodePort: 26666
  type: LoadBalancer

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: service1-depolyment
spec:
  selector:
    matchLabels:
      app: service1
  replicas: 1
  template:
    metadata:
      labels:
        app: service1
    spec:
      containers:
        - name: service1
          image: service1-docker-image
          imagePullPolicy: Never
          ports:
            - containerPort: 26666
          # args: ["HOSTNAME", "KUBERNETES_PORT"]

在这个部署文件中,我尝试创建一个 nginx 和一个 java web 应用服务。

是因为我定义了错误的 apiVersion 和 kind 吗?

任何帮助将不胜感激。

【问题讨论】:

  • 错误消息与注释掉的 args: 行相匹配,FWIW。当您在本地运行映像时,除了-p-d 之外,您是否将任何选项传递给docker run
  • 当我在本地运行时,我会使用类似sudo docker run -d -p 80:26666 service1-docker-image
  • 你云删除“HOSTNAME”这一行试试看。
  • 您能具体说明您的期望吗?根据kubernetes.io/docs/tasks/inject-data-application/…“如果您只为容器提供 args,则 Docker 映像中定义的默认入口点将使用您提供的 args 运行。”你能提供你的 Dockerfile 吗?正在使用 microk8s/minikube/cloud 吗?在 GCP 上,我收到有关 nodePort 的错误:The Service "service1-service" is invalid: spec.ports[0].nodePort: Invalid value: 26666: provided port is not in the valid range. The range of valid ports is 30000-32767
  • @PjoterS 提供的端口可以从这里配置。 /etc/kubernetes/manifests/kube-apiserver.yam 再添加一个配置 --service-node-port-range=20000-32767

标签: java docker kubernetes


【解决方案1】:

看看这个错误exec: \"HOSTNAME\": executable file not found in $PATH

我遇到了类似的错误,因为我给了错误的路径,容器无法找到 docker “CMD” 二进制文件。检查文件的路径,这应该可以解决问题。

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 2023-02-11
    • 2023-03-28
    • 1970-01-01
    • 2017-06-19
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多