Étapes de post-installation pour Linux
Temps de lecture estimé : 15 minutes
Cette section contient des procédures facultatives pour configurer les hôtes Linux afin qu’ils fonctionnent mieux avec Docker.
- Gérer Docker en tant qu’utilisateur non root
- Configurer Docker pour démarrer au démarrage
- Utilisez un moteur de stockage différent
- Configurer le pilote de journalisation par défaut
- Configurer où le démon Docker écoute les connexions
- Configuration de l’accès à distance avec le fichier d’unité systemd
- Configuration de l’accès distant avec le démon.json
- Activer IPv6 sur le démon Docker
- Dépannage
- Compatibilité du noyau
- Impossible de se connecter au démon Docker
- Problèmes de transfert IP
- Résolveur DNS trouvé dans resolv.les systèmes Linux qui utilisent une interface graphique ont souvent un gestionnaire de réseau en cours d’exécution, qui utilise une instance dnsmasq s’exécutant sur une adresse de bouclage telle que 127.0.0.1 ou 127.0.1.1 pour mettre en cache les requêtes DNS, et ajoute cette entrée à /etc/resolv.conf. Le service dnsmasq accélère les recherches de mises à jour et fournit également des services DHCP. Cette configuration ne fonctionne pas dans un conteneur Docker qui a son propre espace de noms réseau, car le conteneur Docker résout lui-même des adresses de bouclage telles que 127.0.0.1, et il est très peu probable qu’il exécute un serveur DNS sur sa propre adresse de bouclage.
- Spécifiez les serveurs DNS pour Docker
- Désactiver dnsmasq
- Ubuntu
- RHEL, CentOS ou Fedora
- Autoriser l’accès à l’API distante via un pare-feu
- Votre noyau ne prend pas en charge les capacités de limite d’échange de cgroup
Gérer Docker en tant qu’utilisateur non root
Le démon Docker se lie à un socket Unix au lieu d’un port TCP. Par défaut, le socket Unix appartient à l’utilisateur root
et les autres utilisateurs ne peuvent y accéder qu’en utilisant sudo
. Le démon Docker s’exécute toujours en tant qu’utilisateur root
.
Si vous ne voulez pas préfacer la commande docker
avec sudo
, créez un groupe Unix appelé docker
et ajoutez-y des utilisateurs. Lorsque le démon Docker démarre, il crée un socket Unix accessible par les membres du groupe docker
.
Avertissement
Le groupe
docker
accorde des privilèges équivalents à l’utilisateurroot
. Pour plus de détails sur la façon dont cela affecte la sécurité de votre système, seeDocker Daemon Attack Surface.
Remarque :
Pour exécuter Docker sans privilèges root, voir le démon Docker en tant qu’utilisateur non root (mode Rootless).
Pour créer le groupe docker
et ajouter votre utilisateur :
-
Créez le groupe
docker
.$ sudo groupadd docker
-
Ajoutez votre utilisateur au groupe
docker
.$ sudo usermod -aG docker $USER
-
Déconnectez-vous et reconnectez-vous afin que l’appartenance à votre groupe soit réévaluée.
En cas de test sur une machine virtuelle, il peut être nécessaire de redémarrer la machine virtuelle pour que les modifications prennent effet.
Sur un environnement Linux de bureau tel que X Windows, déconnectez-vous complètement de votre session, puis reconnectez-vous.
Sous Linux, vous pouvez également exécuter la commande suivante pour activer les modifications apportées aux groupes:
$ newgrp docker
-
Vérifiez que vous pouvez exécuter des commandes
docker
sanssudo
.$ docker run hello-world
Cette commande télécharge une image de test et l’exécute dans un conteneur. Lorsque thecontainer s’exécute, il affiche un message d’information et se termine.
Si vous avez initialement exécuté des commandes CLI Docker en utilisant
sudo
avant d’ajouter votre utilisateur au groupedocker
, vous pouvez voir l’erreur suivante, qui indique que votre répertoire~/.docker/
a été créé avec des autorisations incorrectes en raison de lasudo
commandes.WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
Pour résoudre ce problème, supprimez le répertoire
~/.docker/
(il est recréé automatiquement, mais tous les paramètres personnalisés sont perdus), ou modifiez sa propriété et ses autorisations à l’aide des commandes suivantes:$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R
Configurer Docker pour démarrer au démarrage
La plupart des distributions Linux actuelles (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 et plus haut) utilisent systemd
pour gérer quels services démarrent lorsque le système démarre. Sur Debian et Ubuntu, le service Docker est configuré pour démarrer par défaut. Pour démarrer automatiquement Docker et Containerd au démarrage pour otherdistros, utilisez les commandes ci-dessous :
$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service
Pour désactiver ce comportement, utilisez disable
à la place.
$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service
Si vous devez ajouter un proxy HTTP, définir un répertoire ou une partition différent pour les fichiers d’exécution de theDocker, ou effectuer d’autres personnalisations, consultez la personnalisation de vos options de démon Docker systemd.
Utilisez un moteur de stockage différent
Pour obtenir des informations sur les différents moteurs de stockage, voir les pilotes de stockage.Le moteur de stockage par défaut et la liste des moteurs de stockage pris en charge dépendent de la distribution Linux de votre hôte et des pilotes du noyau disponibles.
Configurer le pilote de journalisation par défaut
Docker fournit la capacité de collecter et d’afficher les données de journal de tous les conteneurs s’exécutant sur un hôte via une série de pilotes d’enregistrement. Le pilote de journalisation par défaut, json-file
, écrit des données de journal dans des fichiers au format JSON sur le système de fichiers hôte. Au fil du temps, ces fichiers journaux s’élargissent en taille, entraînant un épuisement potentiel des ressources de disque.
Pour résoudre ces problèmes, configurez le pilote de journalisation json-file
pour activer la rotation des journaux, utilisez des pilotes de journalisation alternatifs tels que le pilote de journalisation « local » qui effectue la rotation des journaux par défaut, ou utilisez un pilote de journalisation qui envoie des journaux à un agrégateur de journalisation distant.
Configurer où le démon Docker écoute les connexions
Par défaut, le démon Docker écoute les connexions sur un socket UNIX pour accepter les requêtes des clients locaux. Il est possible d’autoriser Docker à accepter les demandes d’hôtes distants en le configurant pour écouter sur une adresse IP et un port ainsi que sur le socket UNIX. Pour des informations plus détaillées sur cette option de configuration, consultez la section « Lier Docker à un autre hôte/ port ou à un socket unix » de l’article de référence Docker CLI.
Sécurisez votre connexion
Avant de configurer Docker pour accepter les connexions des hôtes distants, il est extrêmement important que vouscomprenez les implications de sécurité de l’ouverture de docker sur le réseau. Si des mesures ne sont pas prises pour sécuriser la connexion, il est possible pour les utilisateurs non root distants d’obtenir un accès root sur l’hôte. Pour plus d’informations sur l’utilisation des certificats TLS pour sécuriser cette connexion, consultez cet article sur la protection du socket démon Docker.
La configuration de Docker pour accepter les connexions distantes peut être effectuée avec le fichier d’unité docker.service
systemd pour les distributions Linux utilisant systemd, telles que les versions récentes de RedHat, CentOS, Ubuntu et SLES, ou avec le fichier daemon.json
recommandé pour les distributions Linux qui n’utilisent pas systemd.
systemd vs démon.json
La configuration de Docker pour écouter les connexions en utilisant à la fois le fichier d’unité
systemd
et le fichierdaemon.json
provoque un conflit qui empêche le démarrage de Docker.
Configuration de l’accès à distance avec le fichier d’unité systemd
-
Utilisez la commande
sudo systemctl edit docker.service
pour ouvrir un fichier de remplacement pourdocker.service
dans un éditeur de texte. -
Ajoutez ou modifiez les lignes suivantes en remplaçant vos propres valeurs.
ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
-
Enregistrez le fichier.
-
Rechargez la configuration
systemctl
.$ sudo systemctl daemon-reload
-
Redémarrez le Docker.
$ sudo systemctl restart docker.service
Vérifiez si la modification a été honorée en examinant la sortie de
netstat
pour confirmer quedockerd
écoute sur le port configuré.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Configuration de l’accès distant avec le démon.json
-
Définit le tableau
hosts
dans le/etc/docker/daemon.json
pour se connecter au socket UNIX et à une adresse IP, comme suit :{ "hosts": }
-
Redémarrez le Docker.
-
Vérifiez si la modification a été honorée en examinant la sortie de
netstat
pour confirmer quedockerd
écoute sur le port configuré.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Activer IPv6 sur le démon Docker
Pour activer IPv6 sur le démon Docker, voir la prise en charge d’IPv6.
Dépannage
Compatibilité du noyau
Docker ne peut pas fonctionner correctement si votre noyau est plus ancien que la version 3.10 ou s’il manque certains modules. Pour vérifier la compatibilité du noyau, vous pouvez télécharger et exécuter le script check-config.sh
.
$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh
Le script ne fonctionne que sous Linux, pas sous macOS.
Impossible de se connecter au démon Docker
Si vous voyez une erreur telle que la suivante, votre client Docker peut être configuré pour se connecter à un démon Docker sur un autre hôte, et cet hôte peut ne pas être inaccessible.
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
Pour voir à quel hôte votre client est configuré pour se connecter, vérifiez la valeur de la variable DOCKER_HOST
dans votre environnement.
$ env | grep DOCKER_HOST
Si cette commande renvoie une valeur, le client Docker est configuré pour se connecter au démon aDocker s’exécutant sur cet hôte. S’il n’est pas défini, le client Docker est configuré pour se connecter au démon Docker s’exécutant sur l’hôte local. S’il est défini par erreur, utilisez la commande suivante pour le désactiver :
$ unset DOCKER_HOST
Vous devrez peut-être modifier votre environnement dans des fichiers tels que ~/.bashrc
ou ~/.profile
pour éviter que le ~/.profile
DOCKER_HOST
variable d’être définie par défaut.
Si DOCKER_HOST
est défini comme prévu, vérifiez que le démon Docker s’exécute sur l’hôte distant et qu’un pare-feu ou une panne de réseau ne vous empêche pas de vous connecter.
Problèmes de transfert IP
Si vous configurez manuellement votre réseau à l’aide de systemd-network
avec systemd
version 219 ou supérieure, les conteneurs Docker peuvent ne pas pouvoir accéder à votre réseau.À partir de systemd
version 220, le paramètre de transfert pour un réseau donné (net.ipv4.conf.<interface>.forwarding
) est désactivé par défaut. Ce paramètre évite le transfert IP. Cela est également en conflit avec le comportement de Docker consistant à activer le paramètre net.ipv4.conf.all.forwarding
dans les conteneurs.
Pour contourner ce problème sur RHEL, CentOS ou Fedora, modifiez le fichier <interface>.network
dans /usr/lib/systemd/network/
sur votre hôte Docker (ex: /usr/lib/systemd/network/80-container-host0.network
) et ajoutez le bloc suivant dans le section.
...IPForward=kernel# ORIPForward=true
Cette configuration permet le transfert IP depuis le conteneur comme prévu.
Résolveur DNS trouvé dans resolv.les systèmes Linux qui utilisent une interface graphique ont souvent un gestionnaire de réseau en cours d’exécution, qui utilise une instance dnsmasq
s’exécutant sur une adresse de bouclage telle que 127.0.0.1
ou 127.0.1.1
pour mettre en cache les requêtes DNS, et ajoute cette entrée à /etc/resolv.conf
. Le service dnsmasq
accélère les recherches de mises à jour et fournit également des services DHCP. Cette configuration ne fonctionne pas dans un conteneur Docker qui a son propre espace de noms réseau, car le conteneur Docker résout lui-même des adresses de bouclage telles que 127.0.0.1
, et il est très peu probable qu’il exécute un serveur DNS sur sa propre adresse de bouclage.
Si Docker détecte qu’aucun serveur DNS référencé dans /etc/resolv.conf
n’est un serveur DNS entièrement fonctionnel, l’avertissement suivant se produit et Docker utilise les serveurs publicDNS fournis par Google à 8.8.8.8
et 8.8.4.4
pour la résolution DNS.
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers :
Si vous voyez cet avertissement, vérifiez d’abord si vous utilisez dnsmasq
:
$ ps aux |grep dnsmasq
Si votre conteneur doit résoudre des hôtes internes à votre réseau , les serveurs de noms publics ne sont pas adéquats. Vous avez deux choix :
- Vous pouvez spécifier un serveur DNS à utiliser par Docker, ou
- Vous pouvez désactiver
dnsmasq
dans NetworkManager. Si vous faites cela, Networkmanageajoute votre vrai serveur de noms DNS à/etc/resolv.conf
, mais vous perdez les avantages possibles dednsmasq
.
Il vous suffit d’utiliser l’une de ces méthodes.
Spécifiez les serveurs DNS pour Docker
L’emplacement par défaut du fichier de configuration est /etc/docker/daemon.json
. Vous pouvez modifier l’emplacement du fichier de configuration à l’aide de l’indicateur de démon --config-file
. La documentation ci-dessous suppose que le fichier de configuration se trouve à /etc/docker/daemon.json
.
-
Créez ou modifiez le fichier de configuration du démon Docker, qui par défaut est le fichier
/etc/docker/daemon.json
, qui contrôle la configuration du démon Docker.$ sudo nano /etc/docker/daemon.json
-
Ajoutez une clé
dns
avec une ou plusieurs adresses IP comme valeurs. Si le contenu du fichier aexistant, il vous suffit d’ajouter ou de modifier la lignedns
.{ "dns": }
Si votre serveur DNS interne ne peut pas résoudre les adresses IP publiques, incluez au moins un serveur DNS qui le peut, afin que vous puissiez vous connecter à Docker Hub et que vos conteneurs puissent résoudre les noms de domaine Internet.
Enregistrez et fermez le fichier.
-
Redémarrez le démon Docker.
$ sudo service docker restart
-
Vérifiez que Docker peut résoudre les adresses IP externes en essayant d’extraire l’animage:
$ docker pull hello-world
-
Si nécessaire, vérifiez que les conteneurs Docker peuvent résoudre un nom d’hôte interne par ping.
$ docker run --rm -it alpine ping -c4 <my_internal_host>PING google.com (192.168.1.2): 56 data bytes64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms
Désactiver dnsmasq
Ubuntu
Si vous préférez ne pas modifier la configuration du démon Docker pour utiliser une adresse spécifique, suivez ces instructions pour désactiver
dnsmasq
dans NetworkManager.
-
Éditez le fichier
/etc/NetworkManager/NetworkManager.conf
. -
Commentez la ligne
dns=dnsmasq
en ajoutant un caractère#
au début de la ligne.# dns=dnsmasq
Enregistrez et fermez le fichier.
-
Redémarrez NetworkManager et Docker. Comme alternative, vous pouvez redémarrervotre système.
$ sudo restart network-manager$ sudo restart docker
RHEL, CentOS ou Fedora
Pour désactiver dnsmasq
sur RHEL, CentOS ou Fedora :
-
Désactivez le
dnsmasq
service:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
-
Configurez les serveurs DNS manuellement à l’aide de la documentation Hat.
Autoriser l’accès à l’API distante via un pare-feu
Si vous exécutez un pare-feu sur le même hôte que vous exécutez Docker et que vous souhaitez accéder à l’API distante Docker à partir d’un autre hôte et que l’accès à distance est activé, vous devez configurer votre pare-feu pour autoriser les connexions entrantes sur le port Docker, qui par défaut est 2376
si le transport chiffré TLS est activé ou 2375
sinon.
Deux démons de pare-feu courants sont UFW (Pare-feu simple) (souvent utilisé pour les systèmes Ubuntu) et firewalld (souvent utilisé pour les systèmes basés sur RPM). Consultez la documentation de votre système d’exploitation et de votre pare-feu, mais les informations suivantes pourraient vous aider à démarrer. Ces options sont passablement permissives et vous voudrez peut-être utiliser une configuration différente qui verrouille davantage votre système.
-
UFW: Définissez
DEFAULT_FORWARD_POLICY="ACCEPT"
dans votre configuration. -
firewalld : Ajoutez des règles similaires aux suivantes à votre stratégie (une pour les demandes entrants et une pour les demandes sortantes). Assurez-vous que les noms d’interface et les noms de chaîne sont corrects.
<direct> </direct>
Votre noyau ne prend pas en charge les capacités de limite d’échange de cgroup
Sur les hôtes Ubuntu ou Debian, Vous pouvez voir des messages similaires aux suivants lorsque vous travaillez avec une image.
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
Cet avertissement ne se produit pas sur les systèmes basés sur RPM, qui activent ces capacités par défaut.
Si vous n’avez pas besoin de ces fonctionnalités, vous pouvez ignorer l’avertissement. Vous pouvez activer ces fonctionnalités sur Ubuntu ou Debian en suivant ces instructions. La comptabilisation des mémoires et des swaps entraîne une surcharge d’environ 1% du total des mémoires disponibles et une dégradation globale des performances de 10%, même si Docker n’est pas en cours d’exécution.
-
Connectez-vous à l’hôte Ubuntu ou Debian en tant qu’utilisateur avec les privilèges
sudo
. -
Modifiez le fichier
/etc/default/grub
. Ajoutez ou modifiez la ligneGRUB_CMDLINE_LINUX
pour ajouter les deux paires clé-valeur suivantes:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Enregistrez et fermez le fichier.
-
Mettre à jour GRUB.
$ sudo update-grub
Si votre fichier de configuration GRUB a une syntaxe incorrecte, une erreur occurs.In dans ce cas, répétez les étapes 2 et 3.
Les modifications prennent effet lorsque le système est redémarré.
- Jetez un coup d’œil aux modules de formation Get started pour apprendre à créer une image et à l’exécuter en tant qu’application conteneurisée.
- Passez en revue les rubriques de Développer avec Docker pour apprendre à créer de nouvelles applications à l’aide de Docker.
Docker, Documentation Docker, exigences, apt, installation, ubuntu, installation, désinstallation, mise à niveau, mise à jour