Es interesante personalizar un poco ciertas cosas, por ejemplo debemos establecer una estrategia en la configuración de forma que al reiniciar el servidor todo arranque normalmente o que en caso de fallo la web vuelva a funcionar.
Contenedores con systemd sin fallos (Ghost en este caso)
Bueno he de decir que es relativamente complicado ya que systemd gestiona las señales de salida y demás de manera un poco rara con respecto a docker. Da problemas, pero tiene remedio gracias a que los contenedores persisten aunque reinicies el servidor.
Para que funcione lo primero es arrancar el contenedor normalmente pero dando un nombre:
$ docker run -d -p 2368:2368 -v /path/to/ghost:/var/lib/ghost --name myghost ghost
Y después creamos un fichero como podría ser /etc/systemd/system/docker-myghost.service
con el siguiente contenido:
Description=Ghost Service
Alias=myghost.service
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a myghost
ExecStop=/usr/bin/docker stop -t 2 myghost
[Install]
WantedBy=multi-user.target
Ahora solo queda hacer un reload, habilitarlo como systemd.
$ systemctl daemon-reload
$ systemctl enable docker-myghost.service
Ahora podrás arrancar (systemctl start docker-myghost.service
) y parar (systemctl stop docker-myghost.service
) con systemd tú contenedor siempre y cuando no lo borres con docker rm myghost
.
Conclusión
Es una real chapuza que funcionará, según la web oficial1 la clave está en el -a
del docker start
ya que esto añade o inicia (attach) un proceso que redirige todas las señales (stdin/stdout) y así puede gestionar correctamente cuando se para el contendor para volver a iniciarlo. Ignoro más detalles al respecto y me gustaría saber más, la verdad.