Docker notes – Shell Access to Running Container

In some instances we start a container, but it will default to immediately running a program within and prevent immediate shell access.

This is possible since Docker version1.3

Assuming that the container is already running (for example serving a web browser) and you can’t access the shell commands we can gain shell (bash, ssh)  through a new terminal and  use the exec  command to create a bash instance in the container. For this we need either the CONTAINER ID (e.g. 882d81d945c6 dd) or its NAME (e.g. intelligent_bhaskara) which can be obtained by the command docker ps.

Then, opening a new Terminal we issue the command using either name as shown below:

docker exec -it intelligent_bhaskara /bin/bash  or with

CONTAINER ID

docker exec -it 882d81d945c6 /bin/bash

This will give immediate access to inside the container. (Of course the container must have /bin/bash as part of its instructions.)

If the terminal is “dormant” (i.e. --rm had not been part of the original command) it can be found by using docker container ls -a and then “awakened” (i.e. restarted) with  docker start intelligent_bhaskara before the exec  command is given.

Note

If you don’t mind closing the current container and reconnect you could by-pass the default running program by providing an entry point as discussed in this post: Docker notes – Bypass entry point

Links

  • How to Get Shell Access to Running Docker ContainerHow to Get Shell Access to Running Docker Container: https://tecadmin.net/get-shell-access-to-docker-container/
  • Docker reference (Exec): https://docs.docker.com/engine/reference/commandline/exec/#try-to-run-docker-exec-on-a-paused-container
  • How To SSH Into A Running Docker Container And Run Commands: https://phoenixnap.com/kb/how-to-ssh-into-docker-container