Primero, hay un problema en su Dockerfile
:
RUN service mysql restart && /tmp/setup.sh
Las imágenes de Docker no guardan los procesos en ejecución. Por lo tanto, su RUN
comando se ejecuta solo durante la docker build
fase y se detiene después de completar la compilación. En su lugar, debe especificar el comando cuando el contenedor se inicia utilizando los comandos CMD
o ENTRYPOINT
como se muestra a continuación:
CMD mysql start
En segundo lugar, el contenedor acoplable necesita un proceso (último comando) para seguir ejecutándose; de lo contrario, el contenedor saldrá / se detendrá. Por lo tanto, el service mysql start
comando normal no se puede usar directamente en el Dockerfile.
Solución
Hay tres formas típicas de mantener el proceso en ejecución:
Esto se prefiere a menudo cuando tiene un único servicio en ejecución, ya que hace que el registro de salida sea accesible para la ventana acoplable.
Esto funciona solo si hay un script como mysqld_safe
.
Esto es mejor si el comando debe realizar una serie de pasos, nuevamente, /start.sh
debe seguir ejecutándose.
Nota
Para el principiante supervisord
no se recomienda el uso. Honestamente, es exagerado. Es mucho mejor usar un solo servicio / comando único para el contenedor.
Por cierto: consulte https://registry.hub.docker.com para ver las imágenes existentes de MySQL Docker para referencia