How to SSH to docker container in kubernetes cluster? [closed]
I am fairly new to the Google Cloud platform and Docker and set-up a cluster of nodes, made a Dockerfile that copies a repo and runs a Clojure REPL on a public port. I can connect to it from my IDE and play around with my code, awesome!
That REPL should however probably tunneled through SSH, but here is where my problem starts. I can't find a suitable place to SSH into for making changes to the repo that Docker runs the REPL on:
- The exposed IP just exposes the REPL service (correct kubernetes term?) and does not allow me to SSH in.
- Neither does the cluster master endpoint, it gives me a public key error even though I've followed the
Adding or removing SSH keys for all of the instances in your project
part here.
I would like to edit the source files via SSH but I would need to access the docker code repo. I don't know how to proceed.
I understand this isn't exactly a typical way to deploy applications so I am not even sure it's possible to have multiple nodes work with a modified docker codebase (do the nodes share the JVM somehow?).
Concretely my question is how do I SSH into the docker container to access the codebase?
For more recent Kubernetes versions the shell command should be separated by the --
:
kubectl exec -it <POD NAME> -c <CONTAINER NAME> -- bash
Please note that bash
needs to be availalble for execution inside of the container. For different OS flavours you might need to use /bin/sh
, /bin/bash
(or others) instead.
The command format for Kubernetes 1.5.0:
kubectl exec -it <POD NAME> -c <CONTAINER NAME> bash
List instances:
gcloud compute instances list
SSH into instance:
gcloud compute ssh <instance_name> --zone=<instance_zone>
In the instance, list the running processes and their container IDs:
sudo docker ps -a
Attach to a container:
sudo docker exec -it <container_id> bash
The best way to attach to the container through exec command.
Attach to docker running container
docker exec -it YOUR_CONTAINER_ID bash
Attach to Kubernetes running container.
kubectl exec -it YOUR_CONTAINER/POD_NAME bash
Attach to Kubernetes running container in a given namespace.
kubectl exec -it YOUR_CONTAINER/POD_NAME -n YOUR_NAMESPACE bash