Estaba haciendo cosas complejas con Docker, pero resultó que no sé qué -it
significa bandera. Recientemente me encontré con algún ejemplo de docker run
comando que me ha confundido un poco.
docker run -itd ubuntu:xenial /bin/bash
Mi pregunta es qué sentido tiene escribir la -it
bandera aquí, si el contenedor durante la ejecución de la instanciaciónbin/bash
En documentación tenemos un ejemplo
docker run --name test -it debian
con explicacion
El -it indica a Docker que asigne un pseudo-TTY conectado al stdin del contenedor; creando un shell bash interactivo en el contenedor.
y explicación para el indicador -t de la página de ayuda
-t, --tty Asignar un pseudo-TTY
si borro -it bandera durante
docker run -d ubuntu:xenial /bin/bash
mi contenedor recién creado no vive tanto
en docker ps -a
está designado como salido
Lo siento, si mi pregunta es bastante estúpida, no puedo encontrar una explicación en Internet (tengo un malentendido significativo de ese punto).
fuente
/bin/bash
no tiene contenido disponible en stdin, no tiene comandos para ejecutar y no hay forma de avisar al usuario, por lo que sale. Este es un comportamiento 100% normal y esperado.Respuestas:
-it
es la abreviatura de--interactive + --tty
cuandodocker run
con este comando ... lo llevaría directamente al interior del contenedor, donde-d
es la abreviatura de lo--detach
que significa que simplemente ejecuta el contenedor y luego se separa de él, así que básicamente ejecuta el contenedor en segundo plano ... editar: así que si ejecuta el contenedor de la ventana acoplable con-itd
él, ejecutará las-it
opciones y lo desconectará del contenedor, por lo que su contenedor seguirá ejecutándose en segundo plano incluso sin ninguna aplicación predeterminada para ejecutar.fuente
CMD
comando por defecto, por lo que no ejecutó ninguna aplicación por defecto. . por lo que si lo ejecuta en segundo plano, saldrá inmediatamente porque no tiene ningún trabajo que hacer. .-i
). De manera similar, si ejecuta comandos que se comportan de manera diferente en función de si hay un TTY, puede obtener un comportamiento distinto según la presencia de-t
./bin/bash </dev/null
sale inmediatamente, si lo ejecuta sin Docker. Ejecutardocker run
sin-i
es hacer lo mismo con la copia de labash
que comienza. (Sin-t
, tiene un stdin pero no un TTY, por lo que no se detecta a sí mismo como un shell interactivo, por lo que obtiene un conjunto de comportamientos ligeramente diferente).docker run -it ubuntu:xenial /bin/bash
inicia el contenedor en el modo interactivo (por lo tanto,-it
bandera) que le permite interactuar con/bin/bash
el contenedor. Esto significa que ahora tendránbash
la sesión en el interior del contenedor, por lo que puedels
,mkdir
o hacer cualquier comando de fiesta en el interior del contenedor.La clave aquí es la palabra "interactivo". Si omite la bandera, el contenedor aún se ejecuta
/bin/bash
pero sale inmediatamente. Con la bandera, el contenedor se ejecuta y/bin/bash
luego espera pacientemente su entrada.fuente
docker run -i ubuntu:xenial /bin/bash
-t
: pseudo tty o "pseudo terminal". Sin una terminal, no puede enviar entradas al contenedor.docker run -it ubuntu:xenial
gracias por la respuesta, pero también tendré una sesión de terminal con este comando desde cero (para lo que necesito ejecutar bin / bash entonces). También crea una sesión de terminal-t
etiqueta, uno todavía puede interactuar con el contenedor, pero con él, tendrá una terminal más agradable y con más funciones. Puedes correr con-i
y con-it
para ver la diferencia.