o que é docker run -it flag?
Eu estava fazendo algumas coisas complexas com o docker, mas não sei o que -itflag significa. Recentemente, descobri um exemplo de docker runcomando que me confundiu um pouco.
Minha pergunta é qual é o sentido de escrever -itsinalizador aqui, se o contêiner durante a instanciação executarbin/bash
Na documentação, temos um exemplo
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
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).
Se /bin/bashnã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.
Possível duplicata da opção -t Confuso sobre o Docker para alocar um pseudo-TTY
-ité a abreviatura de --interactive + --ttyquando você docker runcom este comando .. levaria você direto para dentro do contêiner ,, onde -dé a abreviação de --detachque 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 -itdele, as -itopçõ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.
Não é a resposta certa, porque meu contêiner é interrompido após ser executado sem a opção -it.
isso significa que há um erro em seu contêiner .. então seu contêiner falhou ao iniciar ... ou talvez ele não tivesse nenhum CMDcomando 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. .
@Alex, se o programa em seu contêiner é algo que sai quando o stdin é fechado, aí está sua resposta (por que ele não funciona sem -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.
@Alex, ... e para ser claro, também /bin/bash </dev/nullsai imediatamente, se você executá-lo sem o Docker. Correr docker runsem -ié fazer a mesma coisa com a cópia bashdaquele 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).
@AdmiralAdama, o que corrige o problema de cor é a opção -t. O TTY é necessário para compreender os tokens de cor.
docker run -it ubuntu:xenial /bin/bashinicia o contêiner no modo interativo (portanto, -itsinalizador) que permite que você interaja com /bin/basho contêiner. Isso significa que agora você vai ter bashsessão dentro do recipiente, para que você possa ls, mkdirou 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/bashmas será encerrado imediatamente. Com o sinalizador, o contêiner é executado e, em /bin/bashseguida, espera pacientemente por sua entrada.
para o que eu preciso usar o sinalizador -t então? 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
Você está certo. Vou retirar minhas palavras. Sem -ttag, 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 -ie -itpara ver a diferença.