docker exec
Estimated reading time: 3 minutesDescription
Run a command in a running container
Usage
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Options
Name, shorthand | Default | Description |
--detach , -d |
Detached mode: run command in the background | |
--detach-keys |
Override the key sequence for detaching a container | |
--env , -e |
API 1.25+ Set environment variables |
|
--interactive , -i |
Keep STDIN open even if not attached | |
--privileged |
Give extended privileges to the command | |
--tty , -t |
Allocate a pseudo-TTY | |
--user , -u |
Username or UID (format: <name|uid>[:<group|gid>]) |
Parent command
Command | Description |
---|---|
docker | The base command for the Docker CLI. |
Extended description
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. It the underlying image has a custom directory specified with the WORKDIR directive in its Dockerfile, this will be used instead.
COMMAND should be an executable, a chained or a quoted command
will not work. Example: docker exec -ti my_container "echo a && echo b"
will
not work, but docker exec -ti my_container sh -c "echo a && echo b"
will.
Examples
Run docker exec
on a running container
First, start a container.
$ docker run --name ubuntu_bash --rm -i -t ubuntu bash
This will create a container named ubuntu_bash
and start a Bash session.
Next, execute a command on the container.
$ docker exec -d ubuntu_bash touch /tmp/execWorks
This will create a new file /tmp/execWorks
inside the running container
ubuntu_bash
, in the background.
Next, execute an interactive bash
shell on the container.
$ docker exec -it ubuntu_bash bash
This will create a new Bash session in the container ubuntu_bash
.
Next, set an environment variable in the current bash session.
$ docker exec -it -e VAR=1 ubuntu_bash bash
This will create a new Bash session in the container ubuntu_bash
with environment
variable $VAR
set to “1”. Note that this environment variable will only be valid
on the current Bash session.
Try to run docker exec
on a paused container
If the container is paused, then the docker exec
command will fail with an error:
$ docker pause test
test
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ae3b36715d2 ubuntu:latest "bash" 17 seconds ago Up 16 seconds (Paused) test
$ docker exec test ls
FATA[0000] Error response from daemon: Container test is paused, unpause the container before exec
$ echo $?
1