Docker is used to creating containers and run them isolated from the host. Docker containers are very similar to virtual machines where they provide similar services to VMs like SSH, HTTP, Telnet, etc. In this tutorial, we examine how to SSH into a running Docker Container in different ways like using the docker exec
, docker attach
and ssh
command.
Run Command Using “docker exec”
The docker exec
command is used to run commands in a docker container. Different commands can be run by using the “docker exec” as well as the bash can be also started which is very same as making SSH into the docker container. First, the container should be already running. A container can be started by using the “docker run” command by providing the image name. In the following example, we start a container from the ubuntu image.
$ sudo docker run --name myubuntu -d ubuntu
Then we should list the running container name with the “docker ps” command.
$ sudo docker ps
The syntax of the “docker exec” command to run bash shell is like below. The -it
is used to create an interactive terminal for the /bin/bash
command inside the docker container. “ubuntu” is the docker container name.
$ sudo docker exec -it ubuntu /bin/bash
Run Command Using “docker attach”
Another way to SSH into the running docker container to get a shell is using the “docker attach” command. The docker attach
command directly attaches the running container shell into the host system shell by binding input, output, and error streams and launches bash shell
.
In the following example, we attach the running container bash shell named “myubuntu”.
$ sudo docker attach myubuntu
Connect with SSH Command
The last method to make SSH into a running container is installing and running the SSH service inside the container and then getting its IP address in order to connect it by using the SSH command. This method is the most complex method but provides a real SSH connection which can be also used via other host systems to connect to the running container.
Install and Run SSH for Ubuntu, Debian Containers
$ sudo apt-get install ssh
$ sudo systemctl ssh start
$ sudo systemctl ssh enable
$ service ssh status
Install and Run SSH for CentOS, RHEL, Fedora Containers
$ yum –y install openssh-server openssh-clients
$ service sshd start
$ service sshd enable
$ service sshd status
Get the IP Address of the Container
Now we should get the IP address of the container by using the docker inspect
command. In the following example set the CONTAINER_NAME with your container name like “myubuntu” etc.
$ sudo docker inspect -f "{{ .NetworkSettings.IPAddress }}" CONTAINER_NAME
SSH Into Container
This is the last step where we use the ssh
command in order to connect to the container by using its IP address. In the following example, we connect the container with the IP address “192.168.1.10” where the username is “root”. The user name can change in some situations. You can take a look at the container image documentation for different user names.
$ ssh [email protected]