How to SSH to docker container in kubernetes cluster?

7/20/2016

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?

-- bbs
docker
google-cloud-platform
google-compute-engine
google-kubernetes-engine
kubernetes

5 Answers

3/20/2017

The command format for Kubernetes 1.5.0:

kubectl exec -it <POD NAME> -c <CONTAINER NAME> bash
-- Sergey Shcherbakov
Source: StackOverflow

8/12/2016

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  
-- Yoshua Wuyts
Source: StackOverflow

7/21/2016

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

-- Nitin
Source: StackOverflow

12/14/2018

If the pod is in your current namespace, get the list of pods:

kubectl get pods

Pick a pod. Execute a bash session on it:

kubectl exec -it [POD_NAME] -- /bin/bash

Alternatively, find the pod you want in a different namespace:

kubectl get pods --all-namespaces

Pick a pod and execute a bash session on it:

kubectl exec -it [POD_NAME] --namespace [NAMESPACE] -- /bin/bash
-- John McGehee
Source: StackOverflow

7/20/2016

I can't find a suitable place to SSH into for making changes to the repo that Docker runs the REPL on

When you create a cluster, you provision a number of node VMs in your google cloud project. If you look at https://console.cloud.google.com/compute/instances you should see them and each one will have a External IP address which you will be able to ssh into. Then create an ssh tunnel to a node VM that forwards a local port to the pod IP address.

Note that if you are running multiple replicas of your clojure app, you must connect to each replica separately to update the app.

-- Robert Bailey
Source: StackOverflow