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 RUNcomando se ejecuta solo durante la docker buildfase 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 CMDo ENTRYPOINTcomo 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 startcomando 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.shdebe seguir ejecutándose.
Nota
Para el principiante supervisordno 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