# docker exec

<!---MARKER_GEN_START-->
Execute a command in a running container

### Aliases

`docker container exec`, `docker exec`

### Options

| Name                  | Type     | Default | Description                                            |
|:----------------------|:---------|:--------|:-------------------------------------------------------|
| `-d`, `--detach`      | `bool`   |         | Detached mode: run command in the background           |
| `--detach-keys`       | `string` |         | Override the key sequence for detaching a container    |
| `-e`, `--env`         | `list`   |         | Set environment variables                              |
| `--env-file`          | `list`   |         | Read in a file of environment variables                |
| `-i`, `--interactive` | `bool`   |         | Keep STDIN open even if not attached                   |
| `--privileged`        | `bool`   |         | Give extended privileges to the command                |
| `-t`, `--tty`         | `bool`   |         | Allocate a pseudo-TTY                                  |
| `-u`, `--user`        | `string` |         | Username or UID (format: `<name\|uid>[:<group\|gid>]`) |
| `-w`, `--workdir`     | `string` |         | Working directory inside the container                 |


<!---MARKER_GEN_END-->

