因此拥有一个 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 $PATH
和 which 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/