Eu tenho o Nginx instalado em um contêiner do Docker e estou tentando executá-lo assim:
docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx
O problema é que, da maneira como o Nginx funciona, é que o processo inicial gera imediatamente um processo mestre do Nginx e alguns trabalhadores e sai. Como o Docker está apenas observando o PID do comando original, o contêiner pára.
Como evito que o contêiner pare? Eu preciso ser capaz de dizer para vincular ao processo filho primeiro ou impedir que o processo inicial do Nginx saia.
daemon off
não seja endossado pelo nginx .Para expandir a resposta de Charles Duffy, o Nginx usa a
daemon off
diretiva para executar em primeiro plano. Se for inconveniente colocar isso no arquivo de configuração, podemos especificá-lo diretamente na linha de comando. Isso facilita a execução no modo de depuração (primeiro plano) e alterna diretamente para a execução no modo de produção (segundo plano) alterando os argumentos da linha de comando.Para executar em primeiro plano:
Para executar em segundo plano:
fonte
CMD
seráCMD ["nginx", "-g", "daemon off;"]
para estivadorPara expandir a resposta de John, você também pode usar o
Dockerfile
CMD
comando da seguinte maneira (caso deseje iniciar automaticamente sem argumentos adicionais)fonte
A adição deste comando ao Dockerfile pode desativá-lo:
fonte
Apenas para sua informação, até hoje (22 de outubro de 2019) as imagens oficiais do docker Nginx têm a seguinte linha:
por exemplo, https://github.com/nginxinc/docker-nginx/blob/23a990403d6dbe102bf2c72ab2f6a239e940e3c3/mainline/alpine/Dockerfile#L117
fonte
Aqui você tem um exemplo de um Dockerfile que executa o nginx. Como mencionado por Charles, ele usa a
daemon off
configuração:https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17
fonte
Para adicionar respostas de Tomer e Charles,
Sintaxe para executar o nginx no forground no contêiner do Docker usando o Ponto de Entrada:
Não está diretamente relacionado, mas para executar vários comandos com o Entrypoint:
fonte
Também é uma boa idéia usar supervisord ou runit [1] para gerenciamento de serviços.
[1] https://github.com/phusion/baseimage-docker
fonte
Como não há Dockerfile inteiro, aqui está o meu
Dockerfile
solução para o problema.Bom e trabalhando. Obrigado a todas as respostas aqui para resolver o problema final do nginx.
E execute-o com:
fonte