Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

231
Visualizações
¿Cuál es el propósito de las opciones "-i" y "-t" para el comando "docker exec"?

Para ser honesto, siempre me ha confundido docker exec -it … , docker exec -i … y docker exec -t … , así que decido hacer una prueba:

  1. docker exec -it … :

     # docker exec -it 115c89122e72 bash root@115c89122e72:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

    Funciona normalmente.

  2. docker exec -i … :

     # docker exec -i 115c89122e72 bash ^C

    El comando se cuelga y tengo que usar Ctl + c para interrumpirlo.

  3. docker exec -t … :

     # docker exec -t 115c89122e72 bash root@115c89122e72:/# ls ^C

    Entra en el contenedor con éxito, pero se bloquea al ejecutar el primer comando.

Así que parece que no tiene sentido tener los comandos docker exec -i … y docker exec -t … ¿Alguien podría explicar por qué existen las opciones -i y -t para el comando docker exec ?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

-i , --interactive mantiene STDIN abierto incluso si no está adjunto, lo que necesita si desea escribir cualquier comando.

-t , --tty un pseudo-TTY, un pseudo terminal que conecta el "terminal" de un usuario con stdin y stdout. (Ver container/container.go )

Si hace un eco, solo se necesita -t .
Pero para una sesión interactiva en la que ingresa entradas, necesita -i .

Dado que -i mantiene abierta la entrada estándar, también se usa para canalizar la entrada a un contenedor acoplable separado. Eso funcionaría incluso con -d (separar).
Consulte " ¿Cuándo usaría --interactive sin --tty en un contenedor Docker? ":

 $ echo hello | docker run -i busybox cat hello

-i STDIN abierto incluso si no está conectado, ¿cuál es el estado de STDOUT en este caso?

Es, para docker exec , el establecido por docker run .

Pero, con respecto a docker exec , hay un problema actual ( problema 8755: Docker tty no es un tty con docker exec

desafortunadamente, su descubrimiento solo equivale a una diferencia entre el comportamiento de tty en centos6 frente a ubuntu: 14.04. Todavía no hay un tty funcional dentro del exec: solo haga ls -la /proc/self/fd/0 y vea que es un enlace roto que apunta a un pts que no existe.

el error real con el que estamos lidiando es que ciertas bibliotecas estándar asumen que los enlaces simbólicos en /proc/self/fds/ deben ser enlaces simbólicos válidos

El problema es que el tty se crea fuera del host y no hay ninguna referencia a él en el contenedor, como la configuración de /dev/console en el contenedor principal.
Una opción para solucionar esto sería asignar y montar los devpts del host en los contenedores.

Nota (cuarto trimestre de 2017): esto ya debería estar solucionado (docker 17.06-ce) .
Ver PR 33007 .

Ese PR ahora permite (desde el 17.06):

 zacharys-pro:dev razic$ docker run --rm -t -d ubuntu bash 83c292c8e2d13d1b1a8b34680f3fb95c2b2b3fef71d4ce2b6e12c954ae50965a zacharys-pro:dev razic$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 83c292c8e2d1 ubuntu "bash" 2 seconds ago Up 1 second xenodochial_bardeen zacharys-pro:dev razic$ docker exec -ti xenodochial_bardeen tty /dev/pts/1

(antes del 17.06, tty devolvía " not a tty ")

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda