Erro de TTY no Docker usando Jenkins: the input device is not a TTY
Hoje não venho aqui trazer um artigo cheio de conceitos, vim trazer um erro comum do dia a dia em uso da ferramenta de conteinerização chamada Docker que comumente é usada por DevOps.
Como cheguei a esse erro?
Bom, primeiramente eu estava com uma demanda bem particular que precisava do uso de container dentro do Jenkins e este por ter algumas particularidades eu não poderia usar plugins, entretanto dentro dele tinha o docker instalado.
Criei um container e ao colocar para rodar em uma pipeline scriptada joguei o comando com sh para ver o que acontecia e para minha surpresa… o erro apareceu.
O comando “resumido” era:
docker run --name imageBuild -it registry-X/mint-appimage:0.1 ./execDQT.sh
A saída do comando:
the input device is not a TTY
Depois que executei que percebi que o comando não é executado numa TTY pois é a API do Jenkins que executa e não um humano diretamente no terminal.
A Solução:
A solução foi mais simples do que imaginei quando percebi o erro. No build da imagem eu deveria ter criado um entrypoint ao invés de optar por executar diretamente o script em terminal, e assim foi feito.
Passo 1 — Coloquei o script sem .sh e com permissões de execução no path /usr/local/bin
COPY execDQT.sh /root/
RUN chmod +x execDQT.sh
RUN mv execDQT.sh /usr/local/bin/execDQT
Passo 2 — Chamei ele no entrypoint
ENTRYPOINT [ "execDQT" ]
Conclusão
Em resumo foi isso, bem simples e fácil.
Até a próxima! :)