Comment lancer automatiquement le conteneur de docker au redémarrage du système?

47

Comme j'ai hébergé un site WordPress dans des conteneurs Docker et que je veux que ces conteneurs soient toujours démarrés au démarrage, vous devez le faire manuellement.

Nayan Tiwari
la source
quelle version d'ubuntu utilisez-vous?
Maythux
en utilisant le serveur Ubuntu 14.04
nayan tiwari
Cela a été demandé sur ServerFault .
Dan Dascalescu
Crossposted. S'il vous plaît choisir un site, pas beaucoup, pour poster des choses sur.
Thomas Ward

Réponses:

35

Jusqu'à présent, je ne pense pas qu'il y ait un moyen de le faire normalement. Une solution délicate consiste à utiliser la politique de redémarrage

sudo docker run --restart=always -d your_image

Cela signifie que chaque fois que vous arrêtez cette opération, vous quittez votre conteneur. Ainsi, lorsque vous démarrez votre hôte, cela entraîne le redémarrage du menu fixe.

Maythux
la source
il y a des outils d'automatisation comme le chef mais je ne sais pas comment les utiliser
nayan tiwari
Il encore au stade expérimental pour Ubuntu github.com/bflad/chef-docker/blob/master/README.md
Maythux
2
Pourquoi ne pas utiliser les possibilités du système pour cela? upstart et systemd peuvent y faire face à la perfection
Reishin
29

Il est très courant d'ajouter la stratégie de redémarrage sur un conteneur existant.

Cela pourrait être fait avec la commande suivante: docker update --restart {no,on-failure,unless-stopped,always} container_name

Plus de détails: Docker - Démarrer les conteneurs automatiquement

SlimIT
la source
2
Cela a parfaitement résolu mon problème! J'avais un conteneur avec ma base de données et je voulais le démarrer au démarrage de mon Mac. En spécifiant que son image était toujours redémarrée (à moins d'être arrêtée), cela a fonctionné!
Colin
21

Comme ubuntu 15 prend maintenant en charge systemd, exemple pour ce gestionnaire:

someservicename.service

[Unit]
Description=Some service
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a container_name
ExecStop=/usr/bin/docker stop -t 2 container_name

[Install]
WantedBy=multi-user.target

Plus disponible sur le site de docker

Ps config assez mignon :)

Reishin
la source
4

Ce que j'ai fait est d'utiliser les fichiers Upstart.

Vous trouverez des exemples et d’autres solutions sur le site Web de Docker .

Créez un fichier comme celui-ci dans / etc / init:

Description "My container"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
   /usr/bin/docker start -a mycontainer
end script
pre-stop script
  /usr/bin/docker stop mycontainer
end script

Notez que depuis Docker 1.2, il existe des stratégies de redémarrage qui peuvent également aider à redémarrer automatiquement les conteneurs lorsque le service Docker est exécuté (après le démarrage, par exemple).

Personnellement, j'utilise puppet pour approvisionner mon poste de travail et ce module Docker pour créer automatiquement les scripts de démarrage les plus complets (démarrage, arrêt, redémarrage, options de nettoyage, etc.).

aklmie
la source
1
upstart est mort. utilisez systemd.
AmirHossein