linux - remove - Servicios de inicio automático en Docker Container
docker remove container (4)
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
Estoy haciendo algunas pruebas iniciales con Docker. Por el momento tengo mis imágenes y puedo poner algunos contenedores en ejecución, con:
docker ps
docker attach container_id
e iniciar el servicio apache2.
Luego, desde la consola principal, envío el contenedor a la imagen.
Después de salir del contenedor, si intento iniciar el contenedor o si intento ejecutar un contenedor nuevo desde la imagen confirmada, el servicio siempre se detiene.
¿Cómo se puede crear o reiniciar un contenedor con los servicios iniciados, por ejemplo, apache?
Por diseño, los contenedores se iniciaron en modo desconectado cuando finaliza el proceso raíz utilizado para ejecutar el contenedor. Necesita iniciar un servicio Apache en modo FOREGROUND.
docker run -p 8080:80 -d ubuntu/apache apachectl -D FOREGROUND
Referencia: https://docs.docker.com/engine/reference/run/#detached-vs-foreground
EDITAR: Aprendí mucho sobre Docker desde que originalmente publiqué esta respuesta. "Iniciar servicios automáticamente en contenedores Docker" no es un buen patrón de uso para Docker. En su lugar, use algo como flotas , Kubernetes o incluso Monit / SystemD / Upstart / Init.d / Cron para iniciar automáticamente los servicios que se ejecutan dentro de contenedores Docker.
RESPUESTA ORIGINAL: Si está iniciando el contenedor con el comando /bin/bash
, puede hacerlo de la manera descrita aquí: https://.com/a/19872810/2971199
Por lo tanto, si está iniciando el contenedor con el docker run -i -t IMAGE /bin/bash
y si desea iniciar automáticamente apache2 cuando se inicia el contenedor, edite /etc/bash.bashrc
en el contenedor y agregue /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf
(o cualquiera que sea el comando de inicio de apache2) en una nueva línea al final del archivo.
Guarde los cambios en su imagen y reiníciela con la docker run -i -t IMAGE /bin/bash
y encontrará apache2 ejecutándose cuando lo conecte.
Supongo que no puedes. Lo que puedes hacer es crear una imagen usando un Dockerfile y definir una CMD en eso, que se ejecutará cuando se inicie el contenedor. Consulte la documentación del constructor para obtener información básica ( 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 el servicio en funcionamiento.
No necesita automatizar esto usando un archivo Docker. También puede crear la imagen mediante una confirmación manual como lo hace, y ejecutarla en la línea de comando. Luego, usted suministra el comando que debería ejecutar (que es exactamente lo que Dockerfile CMD realmente hace). También puede anular la CMD de Dockerfiles de esta manera: solo se ejecutará la última CMD, que es el comando de línea de comando si inicia el contenedor con una. El comando básico docker run -i -t base /bin/bash
de la documentación es un ejemplo. Si su comando es demasiado largo, podría crear un guión de conveniencia, por supuesto.