Docker - How To SSH Into A Container
Docker is an open platform for developing, shipping, and running applications aimed at delivering applications faster. It allows you to separate your applications from your infrastructure and treat your infrastructure like a managed application thereby helping you to ship code faster, test faster, deploy faster, and shorten the cycle between writing code and running code.
A container consists of an operating system, user-added files, and meta-data. Each container is built from an image which tells Docker what the container holds, what process to run when the container is launched, and a variety of other configuration data. Each container should be responsible for one and only one process. For instance, if you have PHP and Apache, each should have its own separate container, and as soon as the process ends, the container stops.
While working with Docker however, it may be necessary to execute a command inside the container or to even "ssh" into the container. This should generally be seen as bad practice when you have your infrastructure set up properly, however during the initial setup phase it might make your life easier to see and control what's happening inside on-the-fly.
The first thing you need to do is find out the actual name of your container. You can do this with the docker ps command, which is named after the standard Linux command, ps. Here's how to do it:
root@server:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b8755f65eaed vendor/container_name:latest "/start.sh" 8 weeks ago Up 8 weeks 80/tcp container_name_1
Here you'll should see the ID of your container, the name of the image, the entry-point, some info about the uptime of the container, and finally the name. Now, using that name, we can execute commands in the container. For example:
root@server:~# docker exec -it container_name_1 supervisorctl status
In that same way we can "ssh" to the container. We aren't really using SSH to do this, but rather starting a normal shell. Here's how:
root@server:~# docker exec -it container_name_1 /bin/bash root@b8755f65eaed:/#
Now you can see what files might be getting generated or modified within the container and you can manually modify your configs and code here. Note that you should not do this on a production server, and don't forget that if you restart the main process of the container (e.g. if it's an Apache container and you restart Apache) you will kill the container.