Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to SSH into Docker?

I'd like to create the following infrastructure flow:

How can that be achieved using Docker?

like image 873
Kamil Lelonek Avatar asked Jan 25 '15 07:01

Kamil Lelonek


People also ask

How do I connect terminal to docker container?

To connect to a container using plain docker commands, you can use docker exec and docker attach . docker exec is a lot more popular because you can run a new command that allows you to spawn a new shell. You can check processes, files and operate like in your local environment.


2 Answers

Firstly you need to install a SSH server in the images you wish to ssh-into. You can use a base image for all your container with the ssh server installed. Then you only have to run each container mapping the ssh port (default 22) to one to the host's ports (Remote Server in your image), using -p <hostPort>:<containerPort>. i.e:

docker run -p 52022:22 container1  docker run -p 53022:22 container2 

Then, if ports 52022 and 53022 of host's are accessible from outside, you can directly ssh to the containers using the ip of the host (Remote Server) specifying the port in ssh with -p <port>. I.e.:

ssh -p 52022 myuser@RemoteServer --> SSH to container1

ssh -p 53022 myuser@RemoteServer --> SSH to container2

like image 103
Javier Cortejoso Avatar answered Sep 20 '22 16:09

Javier Cortejoso


Notice: this answer promotes a tool I've written.

The selected answer here suggests to install an SSH server into every image. Conceptually this is not the right approach (https://docs.docker.com/articles/dockerfile_best-practices/).

I've created a containerized SSH server that you can 'stick' to any running container. This way you can create compositions with every container. The only requirement is that the container has bash.

The following example would start an SSH server exposed on port 2222 of the local machine.

$ docker run -d -p 2222:22 \   -v /var/run/docker.sock:/var/run/docker.sock \   -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \   jeroenpeeters/docker-ssh  $ ssh -p 2222 localhost 

For more pointers and documentation see: https://github.com/jeroenpeeters/docker-ssh

Not only does this defeat the idea of one process per container, it is also a cumbersome approach when using images from the Docker Hub since they often don't (and shouldn't) contain an SSH server.

like image 32
Jeroen Peeters Avatar answered Sep 20 '22 16:09

Jeroen Peeters