Como enviar texto para stdin do container docker?

1

Eu tenho um contêiner docker que executa um programa java em primeiro plano na inicialização. O programa java recebe entrada em stdin . Como posso programaticamente enviar texto para o programa java?

O contêiner é iniciado com -it , portanto, posso docker attach <container-name> , digitar meu texto, enviá-lo com enter e desanexar usando ^p ^q .

Eu tentei docker exec <container-name> echo my-text , mas isso ficou ecoado no stdout, não no programa java. Posso de alguma forma canalizar isso para o programa java?

Também encontrei uma pergunta semelhante em os fóruns do Docker , mas a solução usa screen e eu prefiro ter uma solução mais limpa.

    
por paolo 29.11.2017 / 16:25

1 resposta

1

socat pode executar o comando e encaminhar o tty para "alguma coisa" .

Um exemplo é criar um servidor de rede:

socat EXEC:"docker run -ti debian bash",pty \
      TCP-LISTEN:7977,bind=127.0.0.1,fork

Isso cria uma porta TCP para se conectar. A porta encaminha tudo para frente e para trás para o processo docker run cli:

→ nc 127.0.0.1 7977
root@045041cf8e60:/# whoami
whoami
root
root@045041cf8e60:/# ^C

Os caracteres de controle são locais para nc , portanto, o contêiner continua em execução.

    
por 08.04.2018 / 03:15