¿Qué es docker run -it flag?

108

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

Alex
fuente
Si /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.
Charles Duffy

Respuestas:

97

-ites la abreviatura de --interactive + --ttycuando docker 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.

Fendi jatmiko
fuente
No es la respuesta correcta, porque mi contenedor se detiene después de ejecutarse sin la opción -it.
Alex
1
eso significa que hay un error en su contenedor ... por lo que su contenedor no pudo iniciarse ... o tal vez no tenía ningún 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. .
Fendi jatmiko
@Alex, si el programa en su contenedor es algo que sale cuando stdin está cerrado, ahí está su respuesta (en cuanto a por qué no se ejecutará sin él -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.
Charles Duffy
@Alex, ... y para ser claros, también /bin/bash </dev/nullsale inmediatamente, si lo ejecuta sin Docker. Ejecutar docker runsin -ies hacer lo mismo con la copia de la bashque 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).
Charles Duffy
1
@AdmiralAdama, lo que soluciona el problema del color es la opción -t. Se necesita TTY para comprender los tokens de color.
kroiz
42

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án bashla sesión en el interior del contenedor, por lo que puede ls, 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.

dvnguyen
fuente
1
para lo que necesito usar la bandera -t entonces? docker run -i ubuntu:xenial /bin/bash
Alex
3
-t: pseudo tty o "pseudo terminal". Sin una terminal, no puede enviar entradas al contenedor.
dvnguyen
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
Alex
1
Tienes razón. Retiraré mis palabras. Sin la -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.
dvnguyen
No encuentro diferencias. ¡Gracias por tus esfuerzos!
Alex