nohup… & não funciona como esperado no script docker

4

Eu tenho um Dockerfile simples como este

FROM ubuntu:latest
ADD run.sh /run.sh
CMD /run.sh

No run.sh, eu tenho isso (também mortalmente simples)

#!/bin/bash
nohup awk 'BEGIN { while (c++<50) print "y" }' &
sleep 10

Quando executo o script no docker a partir do bash (isto é, executo o comando bash no modo interativo e lá executo o script), ele funciona corretamente - ele entra no "nohup mode" e a saída é, corretamente, no nohup. fora.

No entanto, se eu executar o contêiner docker com o /run.sh como o comando padrão, a saída ainda estará em STDOUT.

O que estou fazendo de errado? Por que ele está trabalhando no docker, no bash, mas apenas quando é executado a partir do modo interativo?

    
por Karel Bílek 08.03.2016 / 01:36

2 respostas

6

nohup apenas redireciona a saída do comando se estiver indo para um terminal. Se a saída já estiver indo para outro tipo de arquivo (por exemplo, arquivo regular ou um canal), nohup assume que isso é desejado e não redireciona para nohup.out .

Por padrão, docker run executa o comando por meio de um soquete (conectando o host ao ambiente virtual - é assim que eles se comunicam). Um soquete não é um terminal, então nohup não realiza nenhum redirecionamento.

Se você executar docker run -t , o Docker emulará um terminal no contêiner e, portanto, nohup redirecionará para nohup.out . Se você não passar um nome de comando, o docker funcionará como se você tivesse usado docker run -t bash .

A melhor solução é redirecionar explicitamente a saída do comando para a sua escolha de arquivo de log. Não se esqueça de redirecionar o stderr também. Dessa forma, você saberá onde eles estão indo.

nohup awk 'BEGIN { while (c++<50) print "y" }' >myscript.log 2>&1 &
    
por 09.03.2016 / 02:16
2

Eu não sei muito sobre o Docker, mas nohup tem alguma mágica interna executada em relação ao redirecionamento da saída de comandos. Ele direciona para diferentes lugares, dependendo de onde a saída sua própria é apontada.

Veja a resposta vinculada para mais detalhes - você encontrará a resposta exata em algum lugar entre eles, e os Especificações POSIX para nohup .

    
por 08.03.2016 / 02:08