linux - kubectl exec 行为异常,即使二进制文件在 pod 中,也未找到命令

标签 linux mongodb bash kubernetes openshift

因此拥有一个 OpenShift 集群并在 mongodb-test 命名空间中运行一个 pod。 pod 运行良好

$ kubectl get pods -n mongodb-test                                             
NAME               READY   STATUS      RESTARTS   AGE
mongodb-1-7ww9k    1/1     Running     0          14m

当我执行到 pod 中并运行 mongo 命令时,我没有遇到任何问题并且该命令按预期工作。

$ kubectl exec -it -n mongodb-test  mongodb-1-7ww9k   -c mongodb  sh
sh-4.2$ mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
> 

现在的问题是,当我尝试使用以下语法运行相同的命令时,我得到 mongo not found

$ kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- sh -c mongo
sh: mongo: command not found
E0227 13:02:01.728579   24237 v3.go:79] EOF
                                           command terminated with exit code 127

下面是 pod 内部 echo $PATHwhich mongo 的输出。

$ kubectl exec -ti -n mongodb-test mongodb-1-7ww9k -c mongodb -- sh 
sh-4.2$ echo $PATH
/opt/rh/rh-mongodb36/root/usr/bin:/opt/rh/rh-mongodb36/root/usr/sbin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
sh-4.2$ which mongo
/opt/rh/rh-mongodb36/root/usr/bin/mongo
sh-4.2$ 

最佳答案

所以,这就是问题所在。当我尝试在使用命令

进入 pod 后实际执行 mongo
$ kubectl exec -it -n mongodb-test  mongodb-1-7ww9k   -c mongodb  sh

mongo 可执行文件的路径被设置到 PATH 中(通过 .bash_profile :confused),但是当我尝试调用 mongo,使用下面的命令,同样的事情并没有发生。

kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- sh -c mongo

因为我们怀疑 PATH 是在 .bash_profile 中设置的,所以我尝试在 bash 中执行 mongo 并且下面的命令有效。

kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- bash -c mongo

关于linux - kubectl exec 行为异常,即使二进制文件在 pod 中,也未找到命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60428501/

相关文章:

python - linux/wine/python-os 参数忽略错误

python - conda命令会提示错误: "Bad Interpreter: No such file or directory"

mongodb - Meteor upsert 等效

bash - gvfs-open 打开文件时出错

linux - 脚本在 raspbian 中运行两次

c - 在 linux 中保存 session 或进程状态

java - 如何在 Linux 中打开命令终端?

linux - 在 Linux 下以编程方式截取特定窗口的屏幕截图的 "fastest"方法是什么?

java - MongoDB 在负载下执行缓慢

java - 吗啡和 gson 混合用于 mongodb