使用 kubectl 在 pod 中执行 bash 命令?

问题描述 投票:0回答:3

我的问题很简单。

如何在 pod 中执行 bash 命令?我想用一个 bash 命令完成所有事情。

[root@master ~]# kubectl exec -it --namespace="tools" mongo-pod --bash -c "mongo"
Error: unknown flag: --bash

因此,该命令将被忽略。

[root@master ~]# kubectl exec -it --namespace="tools" mongo-pod bash -c "mongo"
root@mongo-deployment-78c87cb84-jkgxx:/# 

大概如此。

[root@master ~]# kubectl exec -it --namespace="tools" mongo-pod bash mongo
Defaulting container name to mongo.
Use 'kubectl describe pod/mongo-deployment-78c87cb84-jkgxx -n tools' to see all of the containers in this pod.
/usr/bin/mongo: /usr/bin/mongo: cannot execute binary file
command terminated with exit code 126

如果只是一场狂欢,那当然有效。但我想立即跳进 mongo shell。

我找到了解决方案,但不起作用。告诉我现在这是否可能? 在 kubernetes pod 中执行多个命令(或从 shell 脚本)

谢谢。

bash kubernetes kubectl
3个回答
180
投票

双破折号“--”用于将要在容器内运行的命令与 kubectl 参数分隔开。 所以正确的做法是:

kubectl exec -it --namespace=tools mongo-pod -- bash -c "mongo"

您忘记了“--”和“bash”之间的空格。

要执行您可能需要的多个命令:

  • 创建脚本并将其作为卷安装在 pod 中并执行它

  • 使用脚本启动侧容器并运行它


28
投票

我使用类似的东西进入 pod 的外壳:

    kubectl exec -it --namespace develop pod-name bash

然后你可以在 pod 中执行你想要的命令(例如 ping)

    ping www.google.com

然后你就可以看到你的 ping 日志了,瞧……尽情享受吧 :D


1
投票

对我来说,这是打开 pod shell 的正确命令(和参数顺序):

kubectl -n <namepace> exec -it <pod> -- /bin/sh

注意:使用

/bin/bash
导致此错误:

错误:发生内部错误:在容器中执行命令时出错: 无法在容器中执行:无法启动执行“”:OCI运行时执行 失败:执行失败:无法启动容器进程:执行: “/bin/bash”:stat /bin/bash:没有这样的文件或目录:未知

因此请确保您使用

/bin/sh
以避免不必要的错误。

© www.soinside.com 2019 - 2024. All rights reserved.