Docker

SSH into Docker Container

Hello. In this tutorial, we will talk about ssh into a docker container.

1. What is Docker?

Docker is an open-source platform used for the containerization of applications. It allows developers to package their applications along with their dependencies, libraries, and other necessary components into a single container that can run reliably and consistently on any platform. The containerization technology provided by Docker ensures that the application behaves the same way regardless of the underlying infrastructure. Some benefits of Docker are:

  • Portability: Docker containers can run on any platform, regardless of the underlying infrastructure. This makes it easy to move applications between development, testing, and production environments.
  • Scalability: Docker allows you to quickly and easily scale your application by adding or removing containers as needed, without having to make changes to the underlying infrastructure.
  • Isolation: Docker provides a high level of isolation between applications, ensuring that each container runs independently of others, without interfering with each other.
  • Efficiency: Docker containers are lightweight and efficient, consuming fewer resources than traditional virtual machines. This allows you to run more applications on the same hardware.
  • Consistency: Docker ensures that applications behave the same way across different environments, making it easier to test and deploy new versions of your application.
  • Security: Docker provides built-in security features that help protect your applications from external threats. Docker containers are isolated from each other and the underlying infrastructure, reducing the risk of attacks.

Overall, Docker provides a powerful platform for building, testing, and deploying applications that is both efficient and reliable.

1.1 What is Docker used for?

It is used for :

  • For environment replication, while the code runs locally on the machine.
  • For numerous deployment phases i.e. Dev/Test/QA.
  • For version control and distributing the application’s OS within a team.

1.2 Basic Docker Terminology?

  • Image: Representation of Docker container i.e. a JAR or WAR file in Java.
  • Container: Runtime of Docker i.e. a deployed and running Docker image. For example, an executable Spring Boot jar.
  • Engine: The code that manages, creates, and runs the Docker containers.
  • Hub: A public developer’s registry to distribute their code.
  • Repository: A collection of Docker-related images i.e. different versions of the same application.

2. SSH Into Docker Container

SSHing into a Docker container may be necessary for various reasons.

  • Firstly, SSH provides a secure way of accessing the Docker container remotely. With SSH, one can establish an encrypted connection to the container and access its terminal, which can be useful for debugging or troubleshooting.
  • Secondly, there may be scenarios where one needs to access files or run specific commands inside the container that are not exposed through the container’s public API or web interface. In such cases, SSHing into the container can provide direct access to the container’s file system and shell.
  • Thirdly, SSHing into a Docker container can be useful for managing and configuring the container. For example, one can install additional software packages, configure network settings, and update system configurations by accessing the container’s shell directly.

It’s worth noting that SSHing into a Docker container is generally discouraged for security reasons, and it’s recommended to use other methods, such as running commands through the Docker CLI or using Docker exec, whenever possible. However, in some cases, SSHing into a Docker container may be the most practical or efficient way to achieve a specific goal.

2.1 What you’ll need to SSH into a Docker container

To SSH into a Docker container, you need the following:

  • Docker installed on your local machine or the host machine where the container is running.
  • A terminal or command prompt window to execute the SSH command.
  • The container ID or name of the Docker container you want to SSH into.
  • The IP address of the Docker container, which you can get by running the docker inspect command.
  • An SSH client is installed on your local machine or the host machine, such as OpenSSH.

Once you have these requirements, you can SSH into a Docker container by following these steps:

  • Start the Docker container if it’s not already running using the docker start command.
  • Get the IP address of the container by running the docker inspect command and looking for the “IPAddress” field.
  • Use the ssh command to connect to the container with the IP address, using the container ID or name as the username. For example, ssh containername@IPAddress.
  • Enter the password for the container when prompted, which is typically the same as the root password of the host machine.

Note: SSH access to a Docker container is not recommended for security reasons, and it’s usually better to use Docker’s built-in commands to interact with the container.

2.2 Finding the docker container

To find a Docker container ID, you can use the docker ps command. docker ps is a command that lists all the running containers on a Docker host. By default, it only shows the container’s ID, name, image, command, and status. However, it can be further customized with various options to display more information. Here’s an example of how to use the docker ps command:

Command syntax

docker ps

This will display a list of running containers with their details, such as their container ID, name, image, command, status, ports, and creation time.

To find a specific container, you can use the --filter option with various criteria, such as the container name, image name, label, and status. For example, to find a container with a specific name, you can use the following command:

Command syntax

docker ps --filter "name=example-container"

This will list all the running containers with the name “example-container”.

Alternatively, if you want to list all the containers, including the stopped ones, you can use the docker ps -a command.

Command syntax

docker ps -a

This command will display all the containers (both running and stopped) with their details. In summary, docker ps is a useful command to list and filter Docker containers based on various criteria, including their ID, name, image, and status.

2.3 SSH into the docker container

The docker exec command is used to run a command or script inside a running Docker container. This command allows you to execute a command in an existing container, either interactively or non-interactively. Here’s the basic syntax for the docker exec command:

Command syntax

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • OPTIONS: This field contains various options that can be used to customize the execution of the command, such as the working directory, environment variables, and user permissions.
  • CONTAINER: This field contains the name or ID of the container where the command needs to be executed.
  • COMMAND: This field contains the command or script that needs to be executed in the container.
  • ARG: This field contains any additional arguments that need to be passed to the command.

Here are some examples of how to use the docker exec command. To start a Bash shell inside a running container, you can use the following command:

Command syntax

docker exec -it CONTAINER_NAME bash

This command will start a Bash shell inside the container named CONTAINER_NAME.

To execute a single command inside a running container, you can use the following command:

Command syntax

docker exec CONTAINER_NAME ls -la /var/log/

This command will execute the ls -la /var/log/ command inside the container named CONTAINER_NAME.

You can also pass environment variables to the container using the -e option:

Command syntax

docker exec -e VAR_NAME=VAR_VALUE CONTAINER_NAME env

This command will execute the env command inside the container named CONTAINER_NAME, with an environment variable named VAR_NAME set to VAR_VALUE. In summary, the docker exec command is a useful tool to run commands or scripts inside a running container. It allows for both interactive and non-interactive execution and can be customized with various options, such as environment variables and user permissions.

2.4 Troubleshooting

When SSHing into a Docker container, several common issues may arise. Here are some of them:

  • SSH not installed: Many Docker images do not come with SSH installed by default. In this case, you’ll need to install an SSH server inside the container before you can connect to it using SSH.
  • SSH port not exposed: If the SSH port (22) is not exposed when starting the container, you won’t be able to SSH into it. Make sure to expose the SSH port when starting the container, using the -p option.
  • Invalid SSH credentials: If you’re using SSH keys for authentication, make sure the key file exists and is accessible to the SSH client. Also, ensure that the user account inside the container has a valid public key that matches the private key used by the SSH client.
  • Firewall issues: If a firewall or security group is blocking incoming SSH connections, you won’t be able to SSH into the container. Make sure that the necessary ports are open on the host machine and any intervening firewalls.
  • Network configuration issues: If the container has a different network configuration than the host machine, you may not be able to connect to it using SSH. Make sure that the container’s network configuration allows SSH connections from the host machine.
  • Incorrect container ID or name: If you provide an incorrect container ID or name, the SSH command will fail. Make sure to double-check the container ID or name before attempting to SSH into it.

In summary, SSHing into a Docker container may encounter common issues such as missing SSH installation, unexposed SSH port, invalid SSH credentials, firewall issues, network configuration issues, and incorrect container ID or name. Knowing these potential issues can help you troubleshoot and solve problems that may arise when SSHing into Docker containers.

That concludes this tutorial, and I hope that it provided you with the information you were seeking. Enjoy your learning journey, and don’t forget to share!

3. Conclusion

In conclusion, SSH into a Docker container can be a useful tool for developers and system administrators to access the command line interface of a running container. It allows for greater control and flexibility in managing Docker containers, especially in cases where GUI interfaces are not available or practical. However, it is important to take security precautions when using SSH, such as configuring strong passwords and limiting remote access. Overall, SSH into Docker containers is a valuable technique for managing and debugging containerized applications, but it should be used judiciously and with care. You can also download the commands used in this tutorial from the Downloads section.

4. Download the Project

This was a tutorial to understand ssh into a docker container.

Download
You can download the full source code of this example here: SSH into Docker container

Yatin

An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button