Si je veux exécuter un conteneur Docker, je peux alors appeler
$ docker run ...
et tout va bien. Existe-t-il un moyen intégré d'exécuter un conteneur de manière à ce qu'il soit automatiquement redémarré, si le système se bloque et se réinitialise?
Si tel est le cas, est-ce également disponible dans Docker Compose?
Oui, le menu fixe a stratégies de redémarrage tel que docker run --restart=always
qui va gérer cela. Ceci est également disponible dans le fichier de configuration compose.yml en tant que restart: always
.
Si vous souhaitez que le conteneur soit démarré même si aucun utilisateur n'a créé de connexion (telle que VirtualBox VM que je ne fais que démarrer et que je ne souhaite pas me connecter à chaque fois)), voici la procédure à suivre I effectué pour Ubuntu 16.04 LTS. Par exemple, j’ai installé un conteneur Oracle db:
$ docker pull alexeiled/docker-Oracle-xe-11g
$ docker run -d --name=MYPROJECT_Oracle_db --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-Oracle-xe-11g
$ vim /etc/systemd/system/docker-MYPROJECT-Oracle_db.service
et ajoutez le contenu suivant:
[Unit]
Description=Redis container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a MYPROJECT_Oracle_db
ExecStop=/usr/bin/docker stop -t 2 MYPROJECT_Oracle_db
[Install]
WantedBy=default.target
et activer le service au démarrage
Sudo systemctl enable docker-MYPROJECT-Oracle_db.service
Pour plus d'informations https://docs.docker.com/engine/admin/Host_integration/
Le politique de redémarrage par défaut est no
.
Pour les conteneurs créés, utilisez docker update
pour mettre à jour la politique de redémarrage.
docker update --restart=always 0576df221c0b
0576df221c0b
est l'identifiant du conteneur.
Mode plus "doux" de la documentation:
docker run -dit --restart unless-stopped <image_name>
Je voulais réaliser le démarrage du conteneur au démarrage sous Windows.
Par conséquent, je viens de créer une tâche planifiée qui se lance au démarrage du système. Cette tâche démarre simplement "Docker for Windows.exe" (ou quel que soit le nom de votre exécutable docker).
Ensuite, tous les conteneurs avec une politique de redémarrage de "toujours" vont démarrer.
Cest ce que crontab est pour:
@reboot sleep 10 && docker start <container name> 2>&1 | /usr/bin/logger -t 'docker start'
Accédez à votre utilisateur crontab par crontab -e
ou le montrer avec crontab -l
ou éditez votre crontab système à /etc/crontab