mirror of https://github.com/docker/docs.git
234 lines
6.9 KiB
YAML
234 lines
6.9 KiB
YAML
command: docker container exec
|
|
aliases: docker container exec, docker exec
|
|
short: Execute a command in a running container
|
|
long: |-
|
|
The `docker exec` command runs a new command in a running container.
|
|
|
|
The command you specify with `docker exec` only runs while the container's
|
|
primary process (`PID 1`) is running, and it isn't restarted if the container
|
|
is restarted.
|
|
|
|
The command runs in the default working directory of the container.
|
|
|
|
The command must be an executable. A chained or a quoted command doesn't work.
|
|
|
|
- This works: `docker exec -it my_container sh -c "echo a && echo b"`
|
|
- This doesn't work: `docker exec -it my_container "echo a && echo b"`
|
|
usage: docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
|
|
pname: docker container
|
|
plink: docker_container.yaml
|
|
options:
|
|
- option: detach
|
|
shorthand: d
|
|
value_type: bool
|
|
default_value: "false"
|
|
description: 'Detached mode: run command in the background'
|
|
deprecated: false
|
|
hidden: false
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: detach-keys
|
|
value_type: string
|
|
description: Override the key sequence for detaching a container
|
|
deprecated: false
|
|
hidden: false
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: env
|
|
shorthand: e
|
|
value_type: list
|
|
description: Set environment variables
|
|
details_url: '#env'
|
|
deprecated: false
|
|
hidden: false
|
|
min_api_version: "1.25"
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: env-file
|
|
value_type: list
|
|
description: Read in a file of environment variables
|
|
deprecated: false
|
|
hidden: false
|
|
min_api_version: "1.25"
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: interactive
|
|
shorthand: i
|
|
value_type: bool
|
|
default_value: "false"
|
|
description: Keep STDIN open even if not attached
|
|
deprecated: false
|
|
hidden: false
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: privileged
|
|
value_type: bool
|
|
default_value: "false"
|
|
description: Give extended privileges to the command
|
|
details_url: '#privileged'
|
|
deprecated: false
|
|
hidden: false
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: tty
|
|
shorthand: t
|
|
value_type: bool
|
|
default_value: "false"
|
|
description: Allocate a pseudo-TTY
|
|
deprecated: false
|
|
hidden: false
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: user
|
|
shorthand: u
|
|
value_type: string
|
|
description: 'Username or UID (format: `<name|uid>[:<group|gid>]`)'
|
|
deprecated: false
|
|
hidden: false
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
- option: workdir
|
|
shorthand: w
|
|
value_type: string
|
|
description: Working directory inside the container
|
|
details_url: '#workdir'
|
|
deprecated: false
|
|
hidden: false
|
|
min_api_version: "1.35"
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
inherited_options:
|
|
- option: help
|
|
value_type: bool
|
|
default_value: "false"
|
|
description: Print usage
|
|
deprecated: false
|
|
hidden: true
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
examples: |-
|
|
### Run `docker exec` on a running container
|
|
|
|
First, start a container.
|
|
|
|
```console
|
|
$ docker run --name mycontainer -d -i -t alpine /bin/sh
|
|
```
|
|
|
|
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.
|
|
|
|
Next, execute a command on the container.
|
|
|
|
```console
|
|
$ 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.
|
|
|
|
```console
|
|
$ docker exec -it mycontainer sh
|
|
```
|
|
|
|
This starts a new shell session in the container `mycontainer`.
|
|
|
|
### Set environment variables for the exec process (--env, -e) {#env}
|
|
|
|
Next, set environment variables in the current bash session.
|
|
|
|
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 following example creates a new shell session in the container `mycontainer`,
|
|
with environment variables `$VAR_A` set to `1`, and `$VAR_B` set to `2`.
|
|
These environment variables are only valid for the `sh` process started by that
|
|
`docker exec` command, and aren't available to other processes running inside
|
|
the container.
|
|
|
|
```console
|
|
$ 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
|
|
```
|
|
|
|
### Escalate container privileges (--privileged) {#privileged}
|
|
|
|
See [`docker run --privileged`](/reference/cli/docker/container/run/#privileged).
|
|
|
|
### Set the working directory for the exec process (--workdir, -w) {#workdir}
|
|
|
|
By default `docker exec` command runs in the same working directory set when
|
|
the container was created.
|
|
|
|
```console
|
|
$ docker exec -it mycontainer pwd
|
|
/
|
|
```
|
|
|
|
You can specify an alternative working directory for the command to execute
|
|
using the `--workdir` option (or the `-w` shorthand):
|
|
|
|
```console
|
|
$ 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:
|
|
|
|
```console
|
|
$ 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
|
|
```
|
|
deprecated: false
|
|
hidden: false
|
|
experimental: false
|
|
experimentalcli: false
|
|
kubernetes: false
|
|
swarm: false
|
|
|