Estou executando o seguinte comando do meu Jenkinsfile
. No entanto, recebo o erro "O dispositivo de entrada não é um TTY" .
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
Existe uma maneira de executar o script Jenkinsfile
sem fazer o modo interativo?
Basicamente, tenho um arquivo chamado script.sh
que gostaria de executar dentro do contêiner do Docker.
docker
jenkins
jenkins-pipeline
Anthony
fonte
fonte
Respostas:
Remova o
-it
seu CLI para torná-lo não interativo e remova o TTY. Se você também não precisar, por exemplo, executando seu comando dentro de um script Jenkins ou cron, faça isso.Ou você pode alterá-lo para
-i
se tiver introduzido um canal no comando docker que não vem de um TTY. Se você tem algo parecidoxyz | docker ...
oudocker ... <input
na sua linha de comando, faça isso.Ou você pode alterá-lo para
-t
se desejar suporte TTY, mas não o tiver disponível no dispositivo de entrada. Faça isso para formatação colorida da saída em seus logs ou quando você posteriormente conectar ao contêiner com um terminal adequado.Ou se você precisar de um terminal interativo e não estiver executando em um terminal no Linux ou MacOS, use uma interface de linha de comando diferente. É relatado que o PowerShell inclui esse suporte no Windows.
O que é um TTY? É uma interface de terminal que suporta saída em cores, seqüências de escape, movimentação do cursor, etc., que vem dos velhos tempos de terminais burros conectados aos mainframes. Hoje, ele é fornecido pelos terminais de comando do Linux e pelas interfaces ssh. Veja o artigo da Wikipedia para mais detalhes .
fonte
mysql -p
sem especificar uma senha. Ao adicionar-i
a solicitação de senha, nunca aparece. Basta adicionar-t
o prompt, mas ele parece não ler a entrada (que é impressa literalmente em vez de oculta pelo prompt), nem mesmo ao pressionar return; somente ctrl-c pode finalizá-lo. É de alguma forma possível usar o cliente mysql com o docker dessa maneira?Para aqueles que enfrentam esse erro e fazem o git bash no Windows, basta usar o PowerShell onde
-it
funciona perfeitamente.fonte
Não é exatamente o que você está perguntando, mas:
A tecla -T ajudaria as pessoas que estão usando o docker-compose exec!
fonte
docker-compose exec
aloca um TTY.Se você está (como eu) usando o git bash no Windows, basta colocar
antes da sua 'linha de encaixe':
fonte
winpty
?C:\Program Files\Git\usr\bin\winpty.exe
Eu acredito que você precisa estar em um TTY para o docker para poder alocar um TTY (a
-t
opção). Jenkins executa seus trabalhos não em um TTY.Dito isto, o script que você está executando no Jenkins também pode ser executado localmente. Nesse caso, pode ser realmente conveniente ter um TTY alocado para que você possa enviar sinais como ctrl+ cao executá-lo localmente.
Para corrigir isso, faça seu script usar opcionalmente a
-t
opção, assim:fonte
docker run…
forma de comando uma tarefa makefile desencadeada por um gancho gitao usar 'git bash',
1) Eu executo o comando:
Eu tenho o erro:
2), então, eu executo o comando:
Estou com outro erro:
3) terceiro, eu executo o:
funcionou.
quando eu uso 'powershell', tudo funcionou bem.
fonte
se estiver usando o windows, tente com o cmd, para mim funciona. verifique se a janela de encaixe foi iniciada.
fonte
O winpty funciona desde que você não especifique volumes a serem montados, como ".: / mountpoint" ou "$ {pwd}: / mountpoint"
A melhor solução alternativa que encontrei é usar o plug-in git-bash no Visual Code Studio e usar o terminal para iniciar e parar contêineres ou composição do docker.
fonte
Eu sei que isso não está respondendo diretamente à pergunta em questão, mas a qualquer pessoa que se deparar com essa pergunta que esteja usando o WSL executando o Docker para janelas e cmder ou conemu.
O truque é não usar o Docker, instalado no Windows em / mnt / c / Arquivos de programas / Docker / Docker / resources / bin / docker.exe, mas instalar o Docker ubuntu / linux. Vale ressaltar que você não pode executar o Docker em si na WSL, mas pode se conectar ao Docker for Windows a partir do cliente linux Docker.
Instale o Docker no Linux
Conecte-se ao Docker for windows na porta 2375, que precisa ser ativada nas configurações no docker for windows.
docker -H localhost:2375 run -it -v /mnt/c/code:/var/app -w "/var/app" centos:7
Ou defina a variável docker_host que permitirá que você omita a opção -H
export DOCKER_HOST=tcp://localhost:2375
Agora você deve conseguir conectar-se interativamente com uma sessão de terminal tty.
fonte
Minha etapa do pipeline do Jenkins mostrada abaixo falhou com o mesmo erro.
No meu arquivo de script " build.sh ", o comando " docker run " gera esse erro quando foi executado pelo trabalho de Jenkins. No entanto, ele estava funcionando bem quando o script foi executado no terminal do shell. O erro ocorreu devido à opção -t passada para o comando docker run que, como eu sei, tenta alocar o terminal e falha se não houver um terminal para alocar.
No meu caso, alterei o script para passar a opção -t apenas se um terminal pudesse ser detectado. Aqui está o código após as alterações:
fonte