Solo quiero ejecutar un script cuando se inicia el sistema, y después de muchos intentos y de seguir múltiples tutoriales y documentación, no puedo hacerlo.
¿Podrías detectar qué estoy haciendo mal?
Ejecute Ubuntu 20.04 en la ventana acoplable:
docker run -d --name daemon ubuntu:20.04 tail -f /dev/null
Conéctate a él:
docker exec -it daemon /bin/bash
Escribir /etc/init.d/test
:
#!/bin/bash
### BEGIN INIT INFO
# Provides: Join the Swarm
# Default-Start: 4
# Default-Stop: 0 6
# Description: Join the Swarm
### END INIT INFO
start(){
/usr/bin/echo start >> /var/log/test.log
}
stop(){
/usr/bin/echo stop >> /var/log/test.log
}
case "$1" in
start)
start;;
stop)
stop;;
status)
cat /var/log/test.log;;
restart)
stop;
start;
;;
*);;
esac
exit 0;
Establezca permisos y habilite el servicio:
chmod 755 /etc/init.d/test
update-rc.d test defaults 91
update-rc.d test enable
Comprueba que realmente funciona:
service test restart
service test status
Debería generar:
stop
start
Elimine el archivo de registro y salga de la sesión:
rm -rf /var/log/test.log
exit
Reinicie el contenedor y conéctese nuevamente:
docker restart daemon
docker exec -it daemon /bin/bash
Compruebe que el servicio esté realmente activo:
service --status-all
Lamentablemente nunca se ejecutó:
root@407a8e2c90ee:/# service test status
cat: /var/log/test.log: No such file or directory
Parece que los RC están bien:
root@407a8e2c90ee:/# ls /etc/rc*.d
/etc/rc0.d:
K01test
/etc/rc1.d:
/etc/rc2.d:
/etc/rc3.d:
/etc/rc4.d:
S01test
/etc/rc5.d:
/etc/rc6.d:
K01test
/etc/rcS.d:
S01procps
Respuesta1
Lo que entendí de tu pregunta: deseas iniciar un contenedor ubuntu:20.04 y dentro de este contenedor deberías iniciar un servicio adicional.
- Es fantástico tenerte en la familia de partidarios de los contenedores.
- El problema que usted describe no está relacionado con Ubuntu, es el comportamiento predeterminado de los contenedores.
- al iniciar un contenedor se ejecuta un único script, en su caso
tail -f /dev/null
, nada más. ¡Un contenedor de Ubuntu no es una máquina virtual de Ubuntu completa! - El proceso de arranque normal de Ubuntu no ocurre dentro de un contenedor. Su Servicio nunca se toca. Cómo proceder:
- en lugar de usar
docker run ...
recomiendo pagardocker-compose
y la sintaxis deldocker-compose.yaml
archivo - comprobar el parámetro
command
oentrypoint