如何从Helm的values.yaml传递Shell命令至deployment.yaml
正确传递Kubernetes容器命令的Helm配置方法
问题根源
你当前在values.yaml里把命令写成带方括号的字符串"[/bin/sh -c /app/entrypoint-prod.sh]",但Kubernetes的command字段要求是字符串数组类型,直接传递这种字符串会被当成单个命令执行,必然触发报错。
正确配置方式
1. 修改values.yaml
把command_to_run定义为原生字符串数组,而非带括号的字符串:
api: command_to_run: - /bin/sh - -c - /app/entrypoint-prod.sh
2. 调整deployment.yaml中的模板渲染
使用toYaml函数将数组正确渲染为Kubernetes期望的格式,同时保证缩进对齐:
spec: containers: - name: your-app-container command: {{ .Values.api.command_to_run | toYaml | nindent 8 }}
注:nindent 8的数字需根据你deployment文件的层级调整,确保渲染后的数组缩进和其他配置项一致。
额外说明
- 如果你的Docker镜像已经设置了
ENTRYPOINT,其实无需在Kubernetes里指定command,除非你要覆盖镜像的默认启动逻辑。 - 若要保留镜像的
ENTRYPOINT,仅传递启动参数,应该用Kubernetes的args字段替代command,配置逻辑和上述一致。
内容的提问来源于stack exchange,提问作者user1666649
相关产品推荐
相关产品推荐

