Inicie mysql automáticamente cuando ejecute un contenedor Docker

He creado un Dockerfile para tener un entorno de desarrollo en mi computadora con php7, mysql y alguna otra biblioteca.

El service Apache se inicia automáticamente cuando se ejecuta el contenedor, pero no puedo get los mismos resultados con mysql. La última oración de mi file Docker se parece a esta CMD ["bash", "run.sh"] y luego en run.sh tengo esto:

 #!/bin/bash set -e PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL"} sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php/7.0/apache2/php.ini sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php/7.0/cli/php.ini sed -ri "s/^error_reporting\s*=.*$//g" /etc/php/7.0/apache2/php.ini sed -ri "s/^error_reporting\s*=.*$//g" /etc/php/7.0/cli/php.ini echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php/7.0/apache2/php.ini echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php/7.0/cli/php.ini source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND chmod 0755 start.sh sleep 1 start.sh /bin/bash 

Eso llama a un file llamado start.sh que se ve así:

 #!/usr/bin/env bash # Mysql sed -i -e 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mysql.conf.d/mysqld.cnf service mysql start 

Está dividido en dos files porque probé todo pero no puedo hacerlo funcionar. Si hago un docker exec dentro del contenedor y comienzo mysql todo funciona bien.

¿Alguna idea de lo que estoy haciendo mal?

Está ejecutando exec /usr/sbin/apache2 -DFOREGROUND relativamente pronto en el script run.sh Lo que pasa con el exec es que no inicia un subprocess del shell, sino que lo reemplaza con un nuevo process.

Desde la página man :

exec [-cl] [-a name] [command [arguments]]

Si se especifica command, reemplaza el shell. No se crea un nuevo process. Los arguments se convierten en los arguments para mandar.

Esto significa que su script de shell no continuará ejecutándose después de invocar a exec .

Ahora podría sugerir una serie de forms de hackear esto con Bash, pero todos estos (en mi opinión) serán complicados y difíciles de mantener. Si desea administrar múltiples processs dentro de un contenedor (como Apache y MySQL), le sugiero que consulte a los administradores de processs como supervisord . Hay un excelente artículo en la documentation oficial que incluso utiliza un caso de uso similar al tuyo como ejemplo.

start.sh se da sin una ruta absoluta o relativa, como si estuviera en tu PATH, ¿o sí?

Podría agregar algo de "eco". En realidad, me llamo '> log.txt' al comienzo de start.sh para verificar si se ha llamado.