# docker container exec

**Descripción:** Ejecuta un comando en un contenedor en ejecución

**Uso:** `docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]`

**Alias:** `docker exec`








## Descripción

El comando `docker exec` ejecuta un nuevo comando en un contenedor que ya está en funcionamiento.

El comando que especifiques con `docker exec` solo se ejecutará mientras el proceso
primario del contenedor (`PID 1`) esté activo, y no se volverá a ejecutar si el
contenedor se reinicia.

El comando se ejecuta en el directorio de trabajo por defecto del contenedor.

El comando debe ser un ejecutable. Un comando encadenado o entre comillas no funcionará.

- Esto funciona: `docker exec -it mi_contenedor sh -c "echo a && echo b"`
- Esto no funciona: `docker exec -it mi_contenedor "echo a && echo b"`


## Opciones

| Opción                                                        | Predeterminado                                        | Descripción                                                                                                                                    |
| ------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|  | `-d`, `--detach` |  |  Modo desasociado (detached): ejecuta el comando en segundo plano |

 | `--detach-keys` |  |  Invalida la secuencia de teclas para desasociar un contenedor |

 | `-e`, `--env` |  | API 1.25+ Establece variables de entorno |

 | `--env-file` |  | API 1.25+ Lee variables de entorno desde un archivo |

 | `-i`, `--interactive` |  |  Mantiene STDIN abierto incluso si no está asociado |

 | `--privileged` |  |  Otorga privilegios extendidos al comando |

 | `-t`, `--tty` |  |  Asigna una pseudo-TTY |

 | `-u`, `--user` |  |  Nombre de usuario o UID (formato: `<nombre|uid>[:<grupo|gid>]`) |

 | `-w`, `--workdir` |  | API 1.35+ Directorio de trabajo dentro del contenedor |




## Ejemplos

### Ejecutar `docker exec` en un contenedor en funcionamiento

Primero, inicia un contenedor.

```console
$ docker run --name mycontainer -d -i -t alpine /bin/sh
```

Esto crea e inicia un contenedor llamado `mycontainer` a partir de una imagen `alpine`
con un intérprete de comandos `sh` como su proceso principal. La opción `-d` (abreviatura de `--detach`)
hace que el contenedor se ejecute en segundo plano, en modo desasociado, con una pseudo-TTY
conectada (`-t`). Se define la opción `-i` para mantener `STDIN` conectado, lo que
evita que el proceso `sh` finalice inmediatamente.

Luego, ejecuta un comando en el contenedor.

```console
$ docker exec -d mycontainer touch /tmp/execWorks
```

Esto crea un nuevo archivo `/tmp/execWorks` dentro del contenedor en ejecución
`mycontainer`, en segundo plano.

A continuación, ejecuta un shell interactivo `sh` en el contenedor.

```console
$ docker exec -it mycontainer sh
```

Esto inicia una nueva sesión de shell en el contenedor `mycontainer`.

### Establecer variables de entorno para el proceso exec (--env, -e) {#env}

La instrucción `docker exec` hereda las variables de entorno que se definen al
momento de crear el contenedor. Usa `--env` (o la abreviatura `-e`) para
sobrescribir variables de entorno globales, o para establecer variables de entorno
adicionales para el proceso iniciado por `docker exec`.

El siguiente ejemplo crea una nueva sesión de shell en el contenedor `mycontainer`,
con las variables de entorno `$VAR_A` establecida en `1` y `$VAR_B` establecida en `2`.
Estas variables de entorno solo son válidas para el proceso `sh` iniciado por ese
comando `docker exec`, y no están disponibles para otros procesos que se ejecuten dentro
del contenedor.

```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
```

### Escalar privilegios del contenedor (--privileged) {#privileged}

Consulta [`docker run --privileged`](/reference/cli/docker/container/run/#privileged).

### Establecer el directorio de trabajo para el proceso exec (--workdir, -w) {#workdir}

Por defecto, el comando `docker exec` se ejecuta en el mismo directorio de trabajo definido cuando
se creó el contenedor.

```console
$ docker exec -it mycontainer pwd
/
```

Puedes especificar un directorio de trabajo alternativo para que se ejecute el comando
usando la opción `--workdir` (o la abreviatura `-w`):

```console
$ docker exec -it -w /root mycontainer pwd
/root
```

### Intentar ejecutar `docker exec` en un contenedor pausado

Si el contenedor está pausado, el comando `docker exec` fallará con un 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
```



