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=
.
Ajouter un commentaire