【问题标题】:kubectl exec behaving strangely, stating command not found even though the binary is there in the podkubectl exec 行为奇怪,即使 pod 中有二进制文件,也找不到命令
【发布时间】:2020-06-11 04:29:23
【问题描述】:

所以有一个 OpenShift 集群并在 mongodb-test 命名空间中运行一个 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$ 

【问题讨论】:

  • 你能用完整路径执行mongo吗?
  • 拜托,你能用你的部署清单更新你的问题吗?我已经尝试过使用常规的 mongo 图像并且它有效。我想重现与您完全相同的场景。

标签: linux mongodb bash kubernetes openshift


【解决方案1】:

所以,这就是问题所在。当我实际上在使用命令进入 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

【讨论】:

    【解决方案2】:

    你可以试试下面的方法

    # kubectl run mongo --image=mongo --port=27017
    
    # kubectl exec -it mongo-857dc9fb9d-scknx -- mongo
    MongoDB shell version v4.2.3
    connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
    
    if it doesnt work then try below
    
     # kubectl exec -it mongo-857dc9fb9d-scknx -- /opt/rh/rh-mongodb36/root/usr/bin/mongo
    

    【讨论】:

    • 不走运``` kubectl exec -i -n mongodb-test mongodb-1-7ww9k -- mongo exec failed: container_linux.go:345: 启动容器进程导致“exec:\”mongo\ ":executable file not found in $PATH" 命令以退出代码 1 终止 ``` 我认为这与 OpenShift 有关,我认为如果同一个 pod 在正常的 K8S 集群上运行,则一切正常。
    • 嘿,包括 -t 没关系,但我试过了,但没有用。
    • 第二个命令也不起作用。 /opt/rh/rh-mongodb36/root/usr/bin/mongo: error while loading shared libraries: libyaml-cpp.so.rh-mongodb36-0.5: cannot open shared object file: No such file or directory
    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多