Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I run a command on an already existing Docker container?

Tags:

docker

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.

like image 697
Johnston Avatar asked Oct 02 '14 02:10

Johnston


People also ask

How can I run another process inside a running container?

Use a process manager which can run multiple processes: You can set the container's entrypoint to a specialised program which is capable of running and managing multiple processes. One example of this is supervisord. You can use supervisord as your container entrypoint, which will then load the services that you need.

What docker command is used to execute a command in a new container?

The docker exec command runs a new command in a running container. The command started using docker exec only runs while the container's primary process ( PID 1 ) is running, and it is not restarted if the container is restarted. COMMAND will run in the default directory of the container.

Can the docker exec command be run on stopped containers?

For containers that are stopped, you can also start the container using the Docker start command and then run the Docker exec command.

How do I run an existing image in docker?

To run an image inside of a container, we use the docker run command. The docker run command requires one parameter and that is the image name. Let's start our image and make sure it is running correctly. Execute the following command in your terminal.


2 Answers

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):

docker exec -it <container_id_or_name> echo "Hello from container!" 

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:

docker run -it -d shykes/pybuilder /bin/bash 

The most important thing here is the -d option, which stands for detached. 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.

like image 83
Scadge Avatar answered Oct 02 '22 05:10

Scadge


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:

docker run -it -d shykes/pybuilder bin/bash 

If you would like to attach to an already running container:

docker exec -it CONTAINER_ID /bin/bash 

In these examples /bin/bash is used as the command.

like image 39
cdrev Avatar answered Oct 02 '22 05:10

cdrev