Synology Docker (gestion des conteneur via Portainer) : prioriser un conteneur lors du redémarrage du paquet Docker (au reboot du nas) ?

MilesTEG

Administreur
Membre du personnel
6 Septembre 2020
3 136
748
213
Bonjour,
Je viens de constater que lorsque mon NAS vient de redémarrer, et que Docker se lance, certains conteneurs (Fail2ban par exemple) qui utilisent le serveur DNS paramétré dans DSM (qui n'est autre que le conteneur AdGuard Home) ne pouvaient pas envoyer d'email parce que le serveur DNS n'étaient pas encore lancé...

Comment je peux faire pour prioriser le conteneur AdGuard pour qu'il soit le premier à démarrer après un redémarrage du paquet Docker ?
(si c'est possible)

Merci d'avance ;):)
Bonne soirée
++
 
Salut,

Je dirait, ne pas mettre en place de redémarrage auto sur les conteneurs liés sauf sur ton docker AdGuard, puis au démarrage mettre en place un script qui attend que l'interface d'AdGuard soit dispo pour lancer tes conteneurs qui en dépendent.
 
Haaa tu me donnes une idée là ^^
Je vais laisser le tout démarrer comme ça le fait. Mais je vais me faire un script qui sera lancé quelques minutes après le démarrage, ou mieux quand AdGH est lancé, et qui relancera quelques conteneurs qui nécessite la résolution DNS.
Maintenant, comment je fais pour qu'avec un script je détecte le bon lancement du conteneur AdGH ? une idée ?
 
J'utiliserai un curl comme je le fait avec les healthcheck des conteneurs :

curl --fail http://ADRESSE_IP:PORT/
Alors, j'ai testé, en SSH, et ça ne retourne rien si l'IP du conteneur est joignable. Mais si elle n'est pas joignable, ça met super longtemps à afficher une erreur...

Du coup, j'ai cherché comment faire autrement, et j'ai trouvé cette commande :
Bash:
docker inspect --format='{{json .State.Health.Status}}' adguardhome_macvlan
Elle retourne ça en fonction de l'état :
Bash:
"unhealthy"
"starting"
"healthy"
Je peux utiliser cette commande en comparant son retour.
Vu que je ne me rappelle plus comment faire un échappement pour le caractère " qui est présent dans ce qui est affiché par la commande docker inspect... je ferais comme ceci :
Bash:
TEST_HEALTHY_ADGH=$(docker inspect --format='{{json .State.Health.Status}}' adguardhome_macvlan)
echo $TEST_HEALTHY_ADGH
if [[ $TEST_HEALTHY_ADGH =~ .*unhealthy.* ]]; then
  # Le conteneur n'est pas encore prêt
  echo "Le conteneur n'est pas encore démarré et opérationnel."
elif [[ $TEST_HEALTHY_ADGH =~ .*healthy.* ]]; then
  # Le conteneur est lancé, et prêt.
  # On peut relancer les autres conteneurs
  echo "Le conteneur est démarré."
  # Code pour relancer les conteneurs
fi
 
Dernière édition:
Vu que je ne me rappelle plus comment faire un échappement pour le caractère "

Code:
#!/bin/bash
TEST_HEALTHY_ADGH=$(docker inspect --format="{{json .State.Health.Status}}" adguardhome_macvlan)
TEST_HEALTHY_ADGH=${TEST_HEALTHY_ADGH:1:-1}

if [ $TEST_HEALTHY_ADGH == "unhealthy" ]
then
  # Le conteneur n'est pas encore prêt
elif [ $TEST_HEALTHY_ADGH == "healthy" ]
then
    # Le conteneur est lancé, et prêt.
    # On peut relancer les autres conteneurs

    # Code pour relancer les conteneurs
fi

:)
 
Dernière édition:
  • J'aime
Réactions: MilesTEG
@EVOTk
Petite question, y a pas moyen de faire un healtcheck pour le conteneur Fail2ban qui chercher à ping adguard home ?
Ou bien à lui mettre des serveurs DNS de secours ?
 
Bon du coup j'ai ajouté ça dans le yml :
YAML:
    dns:
      - 192.168.2.210
      - 1.1.1.1
      - 9.9.9.9
J'ai éteint AdGH, relancé Fail2Ban, et ça semble être ok.
Je verrais au prochain reboot du NAS :)
 
  • J'aime
Réactions: EVO