EDITAR:he aprendido mucho sobre Docker desde que publiqué originalmente esta respuesta. "Iniciar servicios automáticamente en contenedores de Docker" no es un buen patrón de uso para Docker. En su lugar, use algo como flota, Kubernetes o incluso Monit/SystemD/Upstart/Init.d/Cron para iniciar automáticamente los servicios que se ejecutan dentro de los contenedores de Docker.
RESPUESTA ORIGINAL:Si está iniciando el contenedor con el comando /bin/bash
, entonces puede lograr esto de la manera descrita aquí:https://stackoverflow.com/a/19872810/2971199
Entonces, si está comenzando el contenedor con docker run -i -t IMAGE /bin/bash
y si desea iniciar apache2 automáticamente cuando se inicia el contenedor, edite /etc/bash.bashrc
en el contenedor y agrega /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf
(o cualquiera que sea su comando de inicio apache2) a una nueva línea al final del archivo.
Guarde los cambios en su imagen y reiníciela con docker run -i -t IMAGE /bin/bash
y encontrará apache2 ejecutándose cuando lo adjunte.
Supongo que no puedes. Lo que puede hacer es crear una imagen usando un Dockerfile y definir un CMD en eso, que se ejecutará cuando se inicie el contenedor. Consulte la documentación del constructor para conocer los conceptos básicos (https://docs.docker.com/reference/builder/) y consulte Ejecutar un servicio automáticamente en un contenedor acoplable para obtener información sobre cómo mantener su servicio en ejecución.
No necesita automatizar esto usando un Dockerfile. También puede crear la imagen a través de una confirmación manual como lo hace y ejecutarla desde la línea de comandos. Luego, proporciona el comando que debe ejecutar (que es exactamente lo que hace Dockerfile CMD). También puede anular el CMD de Dockerfiles de esta manera:solo se ejecutará el CMD más reciente, que es el comando de la línea de comandos si inicia el contenedor con uno. El docker run -i -t base /bin/bash
básico El comando de la documentación es un ejemplo. Si su comando se vuelve demasiado largo, puede crear un script de conveniencia, por supuesto.
Una opción que podría usar sería usar un administrador de procesos como Supervisord para ejecutar múltiples procesos. Alguien logró esto con sshd y mongodb:https://github.com/justone/docker-mongodb