Eu estava fazendo algumas coisas complexas com o docker, mas não sei o que -it
flag significa. Recentemente, descobri um exemplo de docker run
comando que me confundiu um pouco.
docker run -itd ubuntu:xenial /bin/bash
Minha pergunta é qual é o sentido de escrever -it
sinalizador aqui, se o contêiner durante a instanciação executarbin/bash
Na documentação, temos um exemplo
docker run --name test -it debian
com explicação
O -it instrui o Docker a alocar um pseudo-TTY conectado ao stdin do contêiner; criando um shell bash interativo no contêiner.
e explicação para -t sinalizador da página de ajuda
-t, --tty Aloca um pseudo-TTY
se eu deletar -it sinalizador durante
docker run -d ubuntu:xenial /bin/bash
meu contêiner recém-criado não vive muito
no docker ps -a
é designado como encerrado
Desculpe, se minha pergunta é bastante estúpida, não consigo encontrar explicação na Internet (tenho um mal-entendido significativo sobre esse ponto).
fonte
/bin/bash
não tiver conteúdo disponível em stdin, ele não terá comandos para executar e nenhuma maneira de avisar o usuário, então ele sai. Este é um comportamento 100% normal e esperado.Respostas:
-it
é a abreviatura de--interactive + --tty
quando vocêdocker run
com este comando .. levaria você direto para dentro do contêiner ,, onde-d
é a abreviação de--detach
que significa que você apenas executa o contêiner e, em seguida, desanexa -o, então basicamente você executa o contêiner em segundo plano .. edit: so se você executar o docker container com-itd
ele, as-it
opções serão executadas e você será desconectado do container, de forma que seu container ainda seja executado em segundo plano, mesmo sem nenhum aplicativo padrão para ser executado.fonte
CMD
comando por padrão, então ele não executou nenhum aplicativo por padrão. .assim, se você executá-lo em segundo plano, ele será encerrado imediatamente porque não há nenhuma tarefa a ser executada. .-i
). Da mesma forma, se ele executa comandos que se comportam de maneira diferente com base na existência de um TTY, você pode obter um comportamento distinto dependendo da presença de-t
./bin/bash </dev/null
sai imediatamente, se você executá-lo sem o Docker. Correrdocker run
sem-i
é fazer a mesma coisa com a cópiabash
daquele que inicia. (Sem-t
, ele tem um stdin, mas não um TTY, então ele não se detecta como um shell interativo, então você obtém um conjunto ligeiramente diferente de comportamentos).docker run -it ubuntu:xenial /bin/bash
inicia o contêiner no modo interativo (portanto,-it
sinalizador) que permite que você interaja com/bin/bash
o contêiner. Isso significa que agora você vai terbash
sessão dentro do recipiente, para que você possals
,mkdir
ou fazer qualquer comando bash dentro do recipiente.A chave aqui é a palavra "interativo". Se você omitir o sinalizador, o contêiner ainda será executado,
/bin/bash
mas será encerrado imediatamente. Com o sinalizador, o contêiner é executado e, em/bin/bash
seguida, espera pacientemente por sua entrada.fonte
docker run -i ubuntu:xenial /bin/bash
-t
: pseudo tty ou "pseudo terminal". Sem um terminal, você não pode enviar entradas para o contêiner.docker run -it ubuntu:xenial
obrigado pela resposta, mas terei uma sessão de terminal com este comando do zero também (para o que eu preciso para executar bin / bash então). Ele também cria uma sessão de terminal-t
tag, ainda é possível interagir com o contêiner, mas com ele você terá um terminal mais agradável e com mais recursos. Você pode correr com-i
e-it
para ver a diferença.