Execute a command in a running container
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Refer to the options section for an overview of available
OPTIONS for this command.
docker exec command runs a new command in a running container.
The command started using
docker exec only runs while the container’s primary
PID 1) is running, and it is not restarted if the container is
COMMAND runs in the default directory of the container. If the underlying image has a custom directory specified with the WORKDIR directive in its Dockerfile, this directory is used instead.
COMMAND must be an executable. A chained or a quoted command does not work.
docker exec -it my_container sh -c "echo a && echo b" does
docker exec -it my_container "echo a && echo b" does not.
For example uses of this command, refer to the examples section below.
||Detached mode: run command in the background|
||Override the key sequence for detaching a container|
||Set environment variables|
||Read in a file of environment variables|
||Keep STDIN open even if not attached|
||Give extended privileges to the command|
||Allocate a pseudo-TTY|
||Username or UID (format:
||Working directory inside the container|
docker exec on a running container
First, start a container.
$ docker run --name mycontainer -d -i -t alpine /bin/sh
This creates and starts a container named
mycontainer from an
sh shell as its main process. The
-d option (shorthand for
sets the container to run in the background, in detached mode, with a pseudo-TTY
-i option is set to keep
STDIN attached (
sh process from exiting immediately.
Next, execute a command on the container.
$ docker exec -d mycontainer touch /tmp/execWorks
This creates a new file
/tmp/execWorks inside the running container
mycontainer, in the background.
Next, execute an interactive
sh shell on the container.
$ docker exec -it mycontainer sh
This starts a new shell session in the container
Set environment variables for the exec process (--env, -e)
Next, set environment variables in the current bash session.
By default, the
docker exec command, inherits the environment variables that
are set at the time the container is created. Use the
--env (or the
to override global environment variables, or to set additional environment variables
for the process started by
The example below creates a new shell session in the container
$VAR_B set to “1” and “2” respectively.
These environment variables are only valid for the
sh process started by that
docker exec command, and are not available to other processes running inside
$ docker exec -e VAR_A=1 -e VAR_B=2 mycontainer env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=f64a4851eb71 VAR_A=1 VAR_B=2 HOME=/root
Set the working directory for the exec process (--workdir, -w)
docker exec command runs in the same working directory set when
the container was created.
$ docker exec -it mycontainer pwd /
You can specify an alternative working directory for the command to execute
--workdir option (or the
$ docker exec -it -w /root mycontainer pwd /root
Try to run
docker exec on a paused container
If the container is paused, then the
docker exec command fails with an error:
$ docker pause mycontainer mycontainer $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 482efdf39fac alpine "/bin/sh" 17 seconds ago Up 16 seconds (Paused) mycontainer $ docker exec mycontainer sh Error response from daemon: Container mycontainer is paused, unpause the container before exec $ echo $? 1