kubernetes 启动时在k8容器中运行bash脚本

hs1rzwqc  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(186)

在k8 pod中运行bash脚本时,Command: []string{"sh", "-c", "scripts/start-script.sh"}Command: []string{"sh", "scripts/start-script.sh"}有什么区别?他们做同样的事情吗?哪个更好?

fnatzsnv

fnatzsnv1#

你根本不需要提到sh

Command: []string{"scripts/start-script.sh"},

字符串
这听起来像是在容器中启动默认主进程的正常做法。如果您的镜像的Dockerfile已经将其作为CMDENTRYPOINT,那么您不需要在Pod规范中指定Command:
sh -c表单启动一个shell,让该shell解释字符串scripts/start-script.sh,然后运行它。这可能会导致额外的进程,并且如果您没有完全控制命令字符串,可能会出现严重的安全问题(*shell注入 * 攻击)。如果需要将环境变量注入到命令行中,使用重定向或管道等功能(在Job spec中可能更有可能),或者运行多个命令(顺序),那么您需要sh -c
sh表单明确指定您需要使用系统Bourne shell来运行脚本。如果脚本不是POSIX shell脚本--它使用来自GNU bash的特性,它实际上是在Python中--这将不起作用。
在正常使用中,脚本应该是可执行的,并且它的第一行应该是“shebang”行#!/bin/sh或类似行。这告诉系统使用哪个解释器来执行它。使用标准设置,您不需要在命令行中包含解释器名称。

jmo0nnb3

jmo0nnb32#

嘿,不,他们不会做同样的事情。使用命令sh,你说你想运行shell,它是一个输入/输出CLI工具。
“-c”这是shell命令的一个选项。它指示后面的参数应该被解释为要由shell执行的命令或脚本。
如果你不指定-c,shell就不知道该怎么处理你的后面的参数。在您的情况下,请使用脚本/start-script.sh

相关问题