2016-10-14 18:30:36 -04:00
|
|
|
---
|
|
|
|
title: "exec"
|
|
|
|
description: "The exec command description and usage"
|
2016-11-03 18:48:30 -04:00
|
|
|
keywords: "command, container, run, execute"
|
2016-10-14 18:30:36 -04:00
|
|
|
---
|
2015-06-21 16:41:38 -04:00
|
|
|
|
|
|
|
# exec
|
|
|
|
|
2016-07-07 14:43:18 -04:00
|
|
|
```markdown
|
|
|
|
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2022-03-29 17:54:35 -04:00
|
|
|
Execute a command in a running container
|
2015-06-21 16:41:38 -04:00
|
|
|
|
cli: use custom annotation for aliases
Cobra allows for aliases to be defined for a command, but only allows these
to be defined at the same level (for example, `docker image ls` as alias for
`docker image list`). Our CLI has some commands that are available both as a
top-level shorthand as well as `docker <object> <verb>` subcommands. For example,
`docker ps` is a shorthand for `docker container ps` / `docker container ls`.
This patch introduces a custom "aliases" annotation that can be used to print
all available aliases for a command. While this requires these aliases to be
defined manually, in practice the list of aliases rarely changes, so maintenance
should be minimal.
As a convention, we could consider the first command in this list to be the
canonical command, so that we can use this information to add redirects in
our documentation in future.
Before this patch:
docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
...
With this patch:
docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Aliases:
docker image ls, docker image list, docker images
Options:
-a, --all Show all images (default hides intermediate images)
...
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-06-28 04:52:25 -04:00
|
|
|
Aliases:
|
|
|
|
docker container exec, docker exec
|
|
|
|
|
2016-09-12 06:34:44 -04:00
|
|
|
Options:
|
2016-07-07 14:43:18 -04:00
|
|
|
-d, --detach Detached mode: run command in the background
|
2016-09-12 06:34:44 -04:00
|
|
|
--detach-keys Override the key sequence for detaching a container
|
2016-07-13 13:24:41 -04:00
|
|
|
-e, --env=[] Set environment variables
|
2020-06-29 18:32:44 -04:00
|
|
|
--env-file Read in a file of environment variables
|
2016-09-12 06:34:44 -04:00
|
|
|
--help Print usage
|
2016-07-07 14:43:18 -04:00
|
|
|
-i, --interactive Keep STDIN open even if not attached
|
2016-09-12 06:34:44 -04:00
|
|
|
--privileged Give extended privileges to the command
|
2016-07-07 14:43:18 -04:00
|
|
|
-t, --tty Allocate a pseudo-TTY
|
|
|
|
-u, --user Username or UID (format: <name|uid>[:<group|gid>])
|
2020-03-15 10:11:43 -04:00
|
|
|
-w, --workdir Working directory inside the container
|
2016-07-07 14:43:18 -04:00
|
|
|
```
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2017-02-13 02:47:38 -05:00
|
|
|
## Description
|
2017-02-07 18:42:48 -05:00
|
|
|
|
2015-06-21 16:41:38 -04:00
|
|
|
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.
|
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
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.
|
2017-04-25 20:54:06 -04:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
COMMAND must be an executable. A chained or a quoted command does not work.
|
|
|
|
For example, `docker exec -it my_container sh -c "echo a && echo b"` works,
|
|
|
|
work, but `docker exec -it my_container "echo a && echo b"` does not.
|
2017-04-25 20:54:06 -04:00
|
|
|
|
2017-02-07 18:42:48 -05:00
|
|
|
## Examples
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2017-02-07 18:42:48 -05:00
|
|
|
### Run `docker exec` on a running container
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2017-02-07 18:42:48 -05:00
|
|
|
First, start a container.
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2021-08-21 08:54:14 -04:00
|
|
|
```console
|
2022-06-06 09:23:30 -04:00
|
|
|
$ docker run --name mycontainer -d -i -t alpine /bin/sh
|
2017-02-07 18:42:48 -05:00
|
|
|
```
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
This creates and starts a container named `mycontainer` from an `alpine` image
|
|
|
|
with an `sh` shell as its main process. The `-d` option (shorthand for `--detach`)
|
|
|
|
sets the container to run in the background, in detached mode, with a pseudo-TTY
|
|
|
|
attached (`-t`). The `-i` option is set to keep `STDIN` attached (`-i`), which
|
|
|
|
prevents the `sh` process from exiting immediately.
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2017-02-07 18:42:48 -05:00
|
|
|
Next, execute a command on the container.
|
|
|
|
|
2021-08-21 08:54:14 -04:00
|
|
|
```console
|
2022-06-06 09:23:30 -04:00
|
|
|
$ docker exec -d mycontainer touch /tmp/execWorks
|
2017-02-07 18:42:48 -05:00
|
|
|
```
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
This creates a new file `/tmp/execWorks` inside the running container
|
|
|
|
`mycontainer`, in the background.
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
Next, execute an interactive `sh` shell on the container.
|
2017-02-07 18:42:48 -05:00
|
|
|
|
2021-08-21 08:54:14 -04:00
|
|
|
```console
|
2022-06-06 09:23:30 -04:00
|
|
|
$ docker exec -it mycontainer sh
|
2017-02-07 18:42:48 -05:00
|
|
|
```
|
2015-06-21 16:41:38 -04:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
This starts a new shell session in the container `mycontainer`.
|
|
|
|
|
|
|
|
### <a name=env></a> Set environment variables for the exec process (--env, -e)
|
2017-02-07 18:42:48 -05:00
|
|
|
|
2021-11-26 09:07:14 -05:00
|
|
|
Next, set environment variables in the current bash session.
|
2017-06-15 11:24:41 -04:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
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 `-e` shorthand)
|
|
|
|
to override global environment variables, or to set additional environment variables
|
|
|
|
for the process started by `docker exec`.
|
|
|
|
|
|
|
|
The example below creates a new shell session in the container `mycontainer` with
|
|
|
|
environment variables `$VAR_A` and `$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
|
|
|
|
the container.
|
|
|
|
|
2021-08-21 08:54:14 -04:00
|
|
|
```console
|
2022-06-06 09:23:30 -04:00
|
|
|
$ 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
|
2017-06-15 11:24:41 -04:00
|
|
|
```
|
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
### <a name=workdir></a> Set the working directory for the exec process (--workdir, -w)
|
2017-06-15 11:24:41 -04:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
By default `docker exec` command runs in the same working directory set when
|
|
|
|
the container was created.
|
2017-12-01 02:26:18 -05:00
|
|
|
|
2021-08-21 08:54:14 -04:00
|
|
|
```console
|
2022-06-06 09:23:30 -04:00
|
|
|
$ docker exec -it mycontainer pwd
|
2017-12-01 02:26:18 -05:00
|
|
|
/
|
|
|
|
```
|
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
You can specify an alternative working directory for the command to execute
|
|
|
|
using the `--workdir` option (or the `-w` shorthand):
|
2017-12-01 02:26:18 -05:00
|
|
|
|
2021-08-21 08:54:14 -04:00
|
|
|
```console
|
2022-06-06 09:23:30 -04:00
|
|
|
$ docker exec -it -w /root mycontainer pwd
|
2017-12-01 02:26:18 -05:00
|
|
|
/root
|
|
|
|
```
|
|
|
|
|
2017-06-15 11:24:41 -04:00
|
|
|
|
2017-02-07 18:42:48 -05:00
|
|
|
### Try to run `docker exec` on a paused container
|
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
If the container is paused, then the `docker exec` command fails with an error:
|
2017-02-07 18:42:48 -05:00
|
|
|
|
2021-08-21 08:54:14 -04:00
|
|
|
```console
|
2022-06-06 09:23:30 -04:00
|
|
|
$ docker pause mycontainer
|
|
|
|
mycontainer
|
2017-02-07 18:42:48 -05:00
|
|
|
|
|
|
|
$ docker ps
|
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
|
|
|
482efdf39fac alpine "/bin/sh" 17 seconds ago Up 16 seconds (Paused) mycontainer
|
2017-02-07 18:42:48 -05:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
$ docker exec mycontainer sh
|
2017-02-07 18:42:48 -05:00
|
|
|
|
2022-06-06 09:23:30 -04:00
|
|
|
Error response from daemon: Container mycontainer is paused, unpause the container before exec
|
2017-02-07 18:42:48 -05:00
|
|
|
|
|
|
|
$ echo $?
|
|
|
|
1
|
|
|
|
```
|