K
Q

Execute bash command in pod with kubectl?

July 9, 2018

How to execute a Bash command in the pod? I want to do everything with a single Bash command.

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

So, the command is simply ignored.

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

Or so.

[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

If it's just a Bash, it certainly works. But I want to jump into the mongo shell immediately.

I found a solution, but it does not work. Tell me if this is possible now? https://stackoverflow.com/questions/43499313/executing-multiple-commands-or-from-a-shell-script-in-a-kubernetes-pod

-- JDev
bash
kubernetes
kubectl

6 Answers

July 9, 2018

The double dash symbol "--" is used to separate the command you want to run inside the container from the kubectl arguments. So the correct way is:

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

You forgot a space between "--" and "bash".

To execute multiple commands you may want:

  • to create a script and mount it as a volume in your pod and execute it

  • to launch a side container with the script and run it

-- Nicola Ben
Source: StackOverflow

April 3, 2019

I use something like this to get into the pod's shell:

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

then you can execute the command you want within the pod (e.g. ping)

ping www.google.com

then you can see your ping log and voila

-- Anthony Piñero
Source: StackOverflow

March 23, 2023

For me this was the right command (and order of parameters) to open a pod shell:

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

Note: Using

/bin/bash
caused this error:

error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "": OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown

So make sure you're using

/bin/sh
to avoid unwanted errors.

-- Ghasem
Source: StackOverflow

March 1, 2024
  • Case 1: For one container in the pod, you could directly use

    kubectl exec -it -n NAMESPACE pod-name -- /bin/bash

    or

    kubectl exec -it -n NAMESPACE pod-name -- /bin/sh

    it depended on the type of shell command used in your pod.

  • Case 2: There is more than one container in the Pod, the additional

    -c
    could be used to figure out this container.

    kubectl exec -it -n NAMESPACE pod-name -c container-name -- /bin/bash

  • Case 3: There is NO shell in your container image, like

    cluster autoscaler
    . One option is to run a shell in this container through
    ephemeral containers
    and
    kubectl debug
    . Note: Ephemeral container support went into beta in Kubernetes 1.23.

    kubectl debug -n NAMESPACE -it pod-name --image=ubuntu

-- zangw
Source: StackOverflow

August 14, 2024

Tested with Kubernetes 1.30.1

kubectl exec <pod> -n <namespace> -- /bin/bash -c "here is your command or the script with all your commands"
-- Martin Luther ETOUMAN NDAMBWE
Source: StackOverflow

May 18, 2024

I think the main issue here is the lack of space between -- and

bash
.

I ran into a similar problem and simply added --, then a space before

bash
.

It works pretty well this way.

kubectl exec -it --namespace=my-namespace my-pod -c my-container -- bash -c "pwd"

The first -c flag means

container
. The second means
command

Note: The container flag is optional. Only use it if you've got multiple containers in the pod and you want to execute commands within a specific container.

-- Agnes Olorundare
Source: StackOverflow