I created a container with -d
so it's not interactive.
docker run -d shykes/pybuilder bin/bash
I see that the container has exited:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c45e8cc5f0 shykes/pybuilder:latest "bin/bash" 41 minutes ago Exited (0) 2 seconds ago clever_bardeen
Now I would like to run occasional commands on the machine and exit. Just to get the response.
I tried to start the machine. I tried attaching. I thought I could call run
with a container, but that does not seem to be allowed. Using start
just seems to run and then exist quickly.
I'd like to get back into interactive mode after exiting.
I tried:
docker attach d6c45e8cc5f0
But I get:
2014/10/01 22:33:34 You cannot attach to a stopped container, start it first
But if I start it, it exits anyway. Catch 22. I can't win.
In October 2014 the Docker team introduced
docker exec
command: https://docs.docker.com/engine/reference/commandline/exec/So now you can run any command in a running container just knowing its ID (or name):
Note that
exec
command works only on already running container. If the container is currently stopped, you need to first run it with the following command:The most important thing here is the
-d
option, which stands fordetached
. It means that the command you initially provided to the container (/bin/bash
) will be run in the background and the container will not stop immediately.Your container will exit as the command you gave it will end. Use the following options to keep it live:
-i
Keep STDIN open even if not attached.-t
Allocate a pseudo-TTY.So your new
run
command is:If you would like to attach to an already running container:
In these examples
/bin/bash
is used as the command.If you are trying to run shell script, you need run it as bash.
I am running windows container and I need to look inside the docker container for files and folder created and copied.
In order to do that I used following docker entrypoint command to get the command prompt running inside the container or attach to the container.
That helped me both to the command prompt attach to container and to keep the container a live. :)
To expand on katrmr's answer, if the container is stopped and can't be started due to an error, you'll need to
commit
it to an image. Then you can launch bash in the new image:Simple answer: start and attach at the same time. In this case you are doing exactly what you asked for.
make sure to change
<CONTAINER_ID/CONTAINER_NAME>