run -i vs run -it?

1

Estou usando o boot2docker no windows. Eu tentei os seguintes comandos

  docker run -i centos /bin/bash

  docker run -it centos /bin/bash

Ambos fornecem o mesmo tipo de execução. Eu li -i é o modo interativo. -t é o modo terminal. Mas eu posso executar comandos como pwd e ls em ambos -i e -it. Apenas a interface do usuário resultante é diferente.

Então, qual é o uso dessas duas bandeiras? Estou faltando alguma coisa?

    
por Gops AB 23.12.2014 / 10:59

1 resposta

0

docker -i fornece um shell não interativo ( -i significa interativo para o docker, não para o bash dentro dele).

Você pode verificar isso executando o seguinte comando (variável $- includes i se o bash for interativo):

echo $- |grep i && echo i am interactive || echo i am non-interactive

Este bash não interativo não exibe o prompt de comando, é difícil determinar quando o comando de longa execução terminou seu trabalho, você não pode usar o histórico de comandos, e programas baseados em tty parecem uma bagunça.

Teste vim (reclama sobre Output/Input is not a terminal , parece e se comporta de maneira estranha) ou algum jogo parecido com rogue (por exemplo, crawl simplesmente se recusa a trabalhar).

Por outro lado, docker -it fornece um shell interativo comum com prompt de comando (que você pode ajustar via $PS1 ) e histórico de comandos (incluindo Ctrl-r ). Quando um comando termina, é claramente visível por causa de programas que exigem prompt e tty funcionam bem.

Então, se você for digitar comandos manualmente no shell, use docker -it .

    
por 01.05.2015 / 20:37

Tags