Innanzitutto, c'è un problema nel tuo Dockerfile
:
RUN service mysql restart && /tmp/setup.sh
Le immagini Docker non salvano i processi in esecuzione. Pertanto, il RUN
comando viene eseguito solo durante la docker build
fase e si interrompe al termine della compilazione. Invece, è necessario specificare il comando all'avvio del contenitore usando i comandi CMD
o ENTRYPOINT
come di seguito:
CMD mysql start
In secondo luogo, il contenitore docker necessita di un processo (ultimo comando) per continuare a funzionare, altrimenti il contenitore verrà chiuso / arrestato. Pertanto, il normaleservice mysql start
comando non può essere utilizzato direttamente nel Dockerfile.
Soluzione
Esistono tre modi tipici per mantenere il processo in esecuzione:
Questo è spesso preferito quando si dispone di un singolo servizio in esecuzione in quanto rende il registro in uscita accessibile alla finestra mobile.
Funziona solo se esiste uno script simile mysqld_safe
.
Questo è meglio se il comando deve eseguire una serie di passaggi, di nuovo, /start.sh
dovrebbe rimanere in esecuzione.
Nota
Per i principianti che usano supervisord
non è raccomandato. Onestamente, è eccessivo. È molto meglio usare il singolo servizio / comando singolo per il contenitore.
A proposito: consultare https://registry.hub.docker.com per le immagini docker mysql esistenti come riferimento