Faire attendre Docker le montage des disques réseau

Si vos conteneurs Docker utilisent des volumes stockés sur un partage réseau (NFS, SMB, disques externes…), il est crucial que ces dossiers soient montés avant le démarrage de Docker. Sans cela, vous risquez des erreurs, des dossiers vides ou des volumes mal montés.

1. Déclarer les montages réseau dans /etc/fstab

Avant toute chose, assurez-vous que vos points de montage réseau sont bien définis dans /etc/fstab. Voici deux exemples :

# Montage NFS
192.168.1.100:/volume1/medias   /mnt/partage1    nfs   defaults,_netdev,x-systemd.automount,x-systemd.requires=network-online.target  0  0

# Montage Samba
//192.168.1.101/films            /mnt/partage2    cifs  username=utilisateur,password=motdepasse,_netdev,x-systemd.automount,x-systemd.requires=network-online.target  0  0
  • _netdev : indique que le montage dépend du réseau.
  • x-systemd.automount : améliore la gestion par systemd.
  • x-systemd.requires=network-online.target : attend que le réseau soit réellement prêt.

Une fois modifié, rechargez les montages :

sudo mount -a

2. Forcer Docker à attendre les montages

Pour éviter que Docker ne démarre avant que vos dossiers distants ne soient disponibles, vous devez créer un override systemd.

Étape 1 : Créer le dossier d’override

sudo mkdir -p /etc/systemd/system/docker.service.d

Étape 2 : Créer ou éditer le fichier override.conf

sudo nano /etc/systemd/system/docker.service.d/override.conf

Contenu générique du fichier :

[Unit]
Requires=local-fs.target
After=local-fs.target
RequiresMountsFor=/mnt/partage1 /mnt/partage2
  • Remplacez /mnt/partage1 et /mnt/partage2 par vos chemins réels.
  • Les jokers (*) ne sont pas pris en charge. Vous devez lister chaque dossier explicitement.

Étape 3 : Recharger systemd et Docker

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker

3. Vérification et test

Pour tester, déconnectez temporairement un partage ou commentez une ligne dans /etc/fstab. Redémarrez le système :

sudo reboot

Puis vérifiez si Docker s’est correctement lancé :

systemctl status docker

Conclusion

En forçant Docker à attendre vos montages via systemd, vous évitez bien des erreurs au démarrage. Cette méthode simple garantit que tous vos volumes sont disponibles avant que vos conteneurs ne tentent de les utiliser.


Astuce : Si vous utilisez un script personnalisé ou des montages dynamiques, pensez à créer un .mount ou .service dédié, et ajoutez une dépendance de Docker vers ce service avec After= et Requires=.

Romain D.

Passionné d'informatique perdu dans une trame Ethernet. Ce blog est mon bloc-notes public.

Ajouter un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Romain D.

Passionné d'informatique perdu dans une trame Ethernet. Ce blog est mon bloc-notes public.