Primeiro, há um problema no seu Dockerfile
:
RUN service mysql restart && /tmp/setup.sh
As imagens do Docker não salvam os processos em execução. Portanto, seu RUN
comando é executado apenas durante a docker build
fase e para após a conclusão da compilação. Em vez disso, você precisa especificar o comando quando o contêiner for iniciado usando os comandos CMD
ou ENTRYPOINT
como abaixo:
CMD mysql start
Em segundo lugar, o contêiner do docker precisa de um processo (último comando) para continuar em execução, caso contrário, o contêiner sairá / parará. Portanto, o service mysql start
comando normal não pode ser usado diretamente no Dockerfile.
Solução
Existem três maneiras típicas de manter o processo em execução:
Usando o service
comando e acrescentar comando não-final depois disso, comotail -F
CMD service mysql start && tail -F /var/log/mysql/error.log
Isso geralmente é preferido quando você tem um único serviço em execução, pois torna o log de saída acessível à janela de encaixe.
Isso funciona apenas se houver um script como mysqld_safe
.
É melhor se o comando precisar executar uma série de etapas, novamente, /start.sh
permanecer em execução.
Nota
Para iniciantes, o uso supervisord
não é recomendado. Honestamente, é um exagero. É muito melhor usar serviço único / comando único para o contêiner.
BTW: verifique https://registry.hub.docker.com para obter imagens existentes do mysql docker para referência