【问题标题】:Kubernetes - How to make simple Linux container Image without App Running permanentlyKubernetes - 如何在没有 App 永久运行的情况下制作简单的 Linux 容器镜像
【发布时间】:2023-04-04 15:29:01
【问题描述】:

我需要让我的 Linux 容器运行(其中没有任何应用程序或服务),以便在我真正手动从容器外壳(这纯粹是为了一些调试目的,所以我不希望对我的图像本身进行任何修改,请不要建议作为选项)

我已经定义了我的 Kubernetes YAML 文件,希望我能够执行简单的 command: ["/bin/bash"] 但这不起作用,因为它将执行命令并退出容器。那么我怎样才能让它不退出所以我可以exec容器呢?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontarena-ads-deployment2
  labels:
    app: frontarena-ads-deployment2
spec:
  replicas: 1
  template:
    metadata:
      name: frontarena-ads-aks-test2
      labels:
        app: frontarena-ads-aks-test2
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      restartPolicy: Always
      containers:
      - name: frontarena-ads-aks-test2
        image: test.dev/ads:test2
        imagePullPolicy: Always
        env:
        - name: DB_TYPE
          value: "odbc"
        - name: LANG
          value: "en_US.utf8"
        command: ["/bin/bash"]
      imagePullSecrets:
        - name: fa-repo-secret
  selector:
    matchLabels:
      app: frontarena-ads-aks-test2 

当我想查看部署后发生的情况时,我会注意到:

NAME                                                      READY   STATUS             RESTARTS   AGE
frontarena-ads-deployment2-546fc4b75-zmmrs                0/1     CrashLoopBackOff   19         77m

kubectl logs $POD 不返回任何内容 kubectl describe pod $POD 的输出是:

Command:
  /bin/bash
State:          Waiting
  Reason:       CrashLoopBackOff
Last State:     Terminated
  Reason:       Completed
  Exit Code:    0
  Started:      Wed, 07 Apr 2021 11:40:31 +0000
  Finished:     Wed, 07 Apr 2021 11:40:31 +0000

【问题讨论】:

  • 您是否看过Init-containers 的概念,这些概念对于在启动主容器之前进行设置这些任务很有用?
  • 我会在本地系统上尝试docker run --rm -it test.dev/ads:test2 bash,而不是尝试在远程环境中调试映像构建。
  • @DavidMaze 感谢大卫,但由于安全性原因,本地系统没有配置到数据库的所有网络连接,因为它在 Azure 中,所以你提到的这种特殊情况不适用,但无论如何谢谢跨度>

标签: docker kubernetes docker-compose dockerfile containers


【解决方案1】:

您只需要运行一些漫长/无休止的过程即可使容器启动。例如,您可以读取一个流,除非您杀死 pod/容器,否则它将永远持续下去:

command: ["/bin/bash", "-c"]
args: ["cat /dev/stdout"]

【讨论】:

  • 谢谢。此外,我成功地发现也可以这样做:command: ["tail"] args: ["-f","/dev/null"] 它可能对某人也有用。谢谢!
  • @AndreyDonald 这只是无休止任务的另一个例子 :)
猜你喜欢
  • 2020-09-22
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多