So have an OpenShift cluster and running a pod in the mongodb-test namespace. The pod is running fine
$ kubectl get pods -n mongodb-test
NAME READY STATUS RESTARTS AGE
mongodb-1-7ww9k 1/1 Running 0 14m
When I exec into the pod and run the mongo command, I dont get any issue and the command works as expected.
$ 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
>
Now the problem is when I try to run the same command using below syntax I get 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
Below are the output of echo $PATH and which mongo from inside the pod.
$ 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$
So, here is what the problem was. When I tried to execute mongo actually after getting inside the pod using the command
$ kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb sh
somehow the path to where the mongo executable is was being set into PATH (through .bash_profile :confused), but when I tried to call mongo, using the below command, the same was not happening.
kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- sh -c mongo
Since we suspected the PATH was being set in .bash_profile I tried to execute mongo in bash and below command worked.
kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- bash -c mongo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With