Compartir comentarios
Las respuestas se generan en base a la documentación.

docker container exec

DescripciónEjecuta un comando en un contenedor en ejecución
Usodocker 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ónPredeterminadoDescripción
-d, --detachModo desasociado (detached): ejecuta el comando en segundo plano
--detach-keysInvalida la secuencia de teclas para desasociar un contenedor
-e, --envAPI 1.25+ Establece variables de entorno
--env-fileAPI 1.25+ Lee variables de entorno desde un archivo
-i, --interactiveMantiene STDIN abierto incluso si no está asociado
--privilegedOtorga privilegios extendidos al comando
-t, --ttyAsigna una pseudo-TTY
-u, --userNombre de usuario o UID (formato: <nombre|uid>[:<grupo|gid>])
-w, --workdirAPI 1.35+ Directorio de trabajo dentro del contenedor

Ejemplos

Ejecutar docker exec en un contenedor en funcionamiento

Primero, inicia un contenedor.

$ 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.

$ 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.

$ 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)

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.

$ 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)

Consulta docker run --privileged.

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

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

$ 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):

$ 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:

$ 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