Obtenha stdout em tempo real de um contêiner docker em um comando executado remotamente

Obtenha stdout em tempo real de um contêiner docker em um comando executado remotamente

Estou tentando conseguir osaída padrão em tempo realde um comando que estou executando em um contêiner docker. No entanto, preciso fazer isso a partir de um comando remoto executado em outro host.

Quando estou no host do docker, posso executar meu comando do docker -ite obter a saída em tempo real necessária. No entanto, tenho essa restrição ondeterpara executar o comando remotamente, tornando a solução anterior inútil. Não posso usar -tporque ele executa um pseudo terminal baseado em $TERM que não existe com o comando remoto porque não existe nenhum terminal.

Também tentei executar o comando docker para -dexecutá-lo em segundo plano, docker logs -f <container>mas a saída ainda é fornecida de uma só vez no final do processo.

Qualquer solução ou conselho é apreciado e corrija-me se pertencer a outra pilha.

Responder1

Descobri isso com alguma ajuda no github do Docker. Não mencionei que estava tentando executar um script python no contêiner, mas não achei que fosse importante.

Na verdade, este não era um problema do docker, mas um problema do python. aprendiDocker já fornece stdout em tempo real. Python estava mantendo todo o stdout em seu buffer e não liberando até a conclusão do script. Exceto quando o código foi executado em um terminal com -t.

No comando docker, tudo que eu precisava era chamar o script para python -u <script>evitar que o python armazenasse em buffer o stdout.

Responder2

Bem, por que você não usa a pilha ELK com logsprout, você pode obter logs em tempo real de todos os contêineres docker, além de pesquisar entre os logs e muitas outras coisas legais

informação relacionada