我希望在kubernetes配置文件的command
标记中向Docker容器发送多个入口点命令。
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec: # specification of the pod’s contents
restartPolicy: Never
containers:
- name: hello
image: "ubuntu:14.04"
command: ["command1 arg1 arg2 && command2 arg3 && command3 arg 4"]
但似乎它不起作用。在命令标记中发送多个命令的正确格式是什么?
答案 0 :(得分:36)
容器中只能有一个入口点...如果要运行多个这样的命令,请将bash作为入口点,并使所有其他命令成为bash运行的参数:
command: ["/bin/bash","-c","touch /foo && echo 'here' && ls /"]
答案 1 :(得分:12)
乔丹的答案是正确的。
但是为了提高可读性,我希望:
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec: # specification of the pod’s contents
restartPolicy: Never
containers:
- name: hello
image: "ubuntu:14.04"
command: ["/bin/sh"]
args:
- -c
- >-
command1 arg1 arg2 &&
command2 arg3 &&
command3 arg4
阅读this以了解YAML块标量(上述>-
格式)。
答案 2 :(得分:5)
使用此命令
command: ["/bin/sh","-c"]
args: ["command one; command two && command three"]
答案 3 :(得分:3)
您可以像通常处理 yaml 数组/列表一样简单地列出命令。查看有关 yaml 数组语法的 this question。
以下是如何将参数列表传递给命令的示例。请注意命令末尾的分号,否则会报错。
containers:
- name: my-container
image: my-image:latest
imagePullPolicy: Always
ports:
- containerPort: 80
command: [ "/bin/bash", "-c" ]
args:
-
echo "check if my service is running and run commands";
while true; do
service my-service status > /dev/null || service my-service start;
if condition; then
echo "run commands";
else
echo "run another command";
fi;
done
echo "command completed, proceed ....";
答案 4 :(得分:0)
另一个包含多个 bash 命令的用于 busybox 图像的示例。 这将通过 while 循环连续运行,否则通常带有简单脚本的 busybox 图像完成任务,然后 pod 将关闭。 这个 yaml 将连续运行 pod。
apiVersion: v1
kind: Pod
metadata:
labels:
run: busybox
name: busybox
spec:
containers:
- command:
- /bin/sh
- -c
- |
echo "running below scripts"
i=0;
while true;
do
echo "$i: $(date)";
i=$((i+1));
sleep 1;
done
name: busybox
image: busybox