Kubernetes - 我可以启动一个没有任何进程的容器吗?

6
我们有一个Docker镜像,正在尝试使用Kubernetes进行部署。我的疑问是,我能否部署一个只有单个容器但在容器启动时不运行任何进程的Pod吗?而是在容器启动后进入容器的bash并运行进程(比如说Java进程)?这种做法可行吗?
目前,当我尝试部署一个没有运行任何进程的Pod时,会出现以下错误:
“Back-off restarting failed docker container Error syncing pod, skipping: failed to "StartContainer" for "containerName" with CrashLoopBackOff:”
但是当我使用Java进程启动容器时,它可以正常工作。我不确定是否因为容器中没有进程?请指导。
1个回答

6

您试图做的事情听起来像是一个反模式,您可以使用sleep进程来实现,例如:

apiVersion: v1
kind: Pod
metadata:
  name: app
spec:
  containers:
  - name: app-container
    image: app-image:version
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]

您可以运行您的进程,但是

  • 您的容器将不会绑定到第二个进程,并且当第二个进程结束时不会结束。
  • 您需要手动操作。
  • 如果您仅在容器的command中运行应用程序,则可以节省时间。

谢谢你的建议。你能详细说明第三点吗?我没有完全理解。 - Dreams
请问您能否解释一下您在命令和参数方面做了什么? - Nagireddy Hanisha
@Nagireddy Hanisha ... 这将启动一个bash脚本,并将实际脚本作为一个参数字符串传递给它。脚本本身在循环中运行sleep。 - pagid
@Tarun - 你能否更新你的问题并展示一下你手动运行的命令? - pagid
@pagid和nagireddy - 第三点我没有完全理解,也没有尝试过。但是类似于这种方式,我在容器中运行了一个带有无限循环的Java进程(而不是睡眠)。这确保了容器正在运行,然后我进入容器并启动所需的Java进程。我不确定是否应该在问题中更新此内容。非常感谢您的答案pagid,它给了我这个解决方案的灵感! - Dreams
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接