Estaba haciendo cosas complejas con Docker, pero resultó que no sé qué -itsignifica bandera. Recientemente me encontré con algún ejemplo de docker runcomando que me ha confundido un poco.
docker run -itd ubuntu:xenial /bin/bash
Mi pregunta es qué sentido tiene escribir la -itbandera 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/bashno 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:
-ites la abreviatura de--interactive + --ttycuandodocker runcon este comando ... lo llevaría directamente al interior del contenedor, donde-des la abreviatura de lo--detachque 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-itopciones 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
CMDcomando 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/nullsale inmediatamente, si lo ejecuta sin Docker. Ejecutardocker runsin-ies hacer lo mismo con la copia de labashque 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/bashinicia el contenedor en el modo interactivo (por lo tanto,-itbandera) que le permite interactuar con/bin/bashel contenedor. Esto significa que ahora tendránbashla sesión en el interior del contenedor, por lo que puedels,mkdiro 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/bashpero sale inmediatamente. Con la bandera, el contenedor se ejecuta y/bin/bashluego 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:xenialgracias 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-tetiqueta, 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-iy con-itpara ver la diferencia.