87 votes

Comment exécuter docker-compose up -d au démarrage du système?

Pour permettre aux conteneurs de démarrer automatiquement au point de démarrage, j'ai essayé d'ajouter la commande:

cd directory_has_docker-compose.yml && docker-compose up -d dans /etc/rc.local.

mais après le redémarrage de la machine, les conteneurs ne fonctionnent pas.

Comment exécuter docker-compose up -d au démarrage du système?

107voto

Oleg Belostotsky Points 2582

Lorsque nous utilisons crontab ou obsolètes /etc/rc.local le fichier, nous avons besoin d'un délai (par exemple, sleep 10, selon la machine) pour faire en sorte que les services système sont disponibles. Généralement, systemd (ou upstart) est utilisé pour gérer les services qui démarrent lorsque le système démarre. Vous pouvez essayer d'utiliser la même configuration pour ceci:

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

Ou, si vous voulez exécuter sans l' -d drapeau:

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Modifier l' WorkingDirectory paramètre avec votre dockerized projet de chemin. Et activer le service démarre automatiquement:

systemctl enable docker-compose-app

69voto

MaxiReglisse Points 318

Vous devriez pouvoir ajouter:

 restart: always 
 

à chaque service que vous souhaitez redémarrer dans le fichier docker-compose.yml

35voto

masoud vatandoost Points 103

Si votre docker.service activé au démarrage du système

 $ sudo systemctl enable docker
 

et vos services dans votre docker-compose.yml a

 restart: always
 

tous les services sont exécutés lorsque vous redémarrez votre système si vous exécutez une seule fois sous la commande

 docker-compose up -d
 

33voto

user39544 Points 649

J'ai essayé restart: always , cela fonctionne sur certains conteneurs (comme php-fpm), mais j'ai rencontré le problème que certains conteneurs (comme nginx) ne redémarre toujours pas après le redémarrage.

Résolu le problème.

 crontab -e

@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
 

18voto

Vaseem007 Points 780

Utiliser redémarrage: toujours dans le fichier de composition du menu fixe. Docker-compos up up -d lancera à nouveau le conteneur à partir d'images. Utilisez docker-compose start pour démarrer les conteneurs arrêtés. Il ne lance jamais de nouveaux conteneurs à partir d'images.

 nginx:   
    restart: always   
    image: nginx   
    ports:
      - "80:80"
      - "443:443"   links:
      - other_container:other_container
 

Aussi, vous pouvez écrire le code dans le fichier fixe pour qu'il soit créé en premier, s'il a la dépendance sur un autre conteneur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X