Articles

É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

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’utilisateur root. 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 :

  1. Créez le groupe docker.

    $ sudo groupadd docker
  2. Ajoutez votre utilisateur au groupe docker.

    $ sudo usermod -aG docker $USER
  3. 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 
  4. Vérifiez que vous pouvez exécuter des commandes docker sans sudo.

    $ 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 groupe docker, vous pouvez voir l’erreur suivante, qui indique que votre répertoire ~/.docker/ a été créé avec des autorisations incorrectes en raison de la sudo 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.servicesystemd 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 fichier daemon.json provoque un conflit qui empêche le démarrage de Docker.

Configuration de l’accès à distance avec le fichier d’unité systemd

  1. Utilisez la commande sudo systemctl edit docker.service pour ouvrir un fichier de remplacement pour docker.service dans un éditeur de texte.

  2. 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
  3. Enregistrez le fichier.

  4. Rechargez la configuration systemctl.

     $ sudo systemctl daemon-reload
  5. Redémarrez le Docker.

    $ sudo systemctl restart docker.service
  6. Vérifiez si la modification a été honorée en examinant la sortie de netstat pour confirmer que dockerd écoute sur le port configuré.

    $ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
  7. Configuration de l’accès distant avec le démon.json

    1. 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 que dockerd é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 ~/.profileDOCKER_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 systemdversion 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 de dnsmasq.

    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.

    1. 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
    2. 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 ligne dns.

      { "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.

    3. Redémarrez le démon Docker.

      $ sudo service docker restart
    4. Vérifiez que Docker peut résoudre les adresses IP externes en essayant d’extraire l’animage:

      $ docker pull hello-world
    5. 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

    dnsmasqdans NetworkManager.

    1. Éditez le fichier /etc/NetworkManager/NetworkManager.conf.

    2. Commentez la ligne dns=dnsmasq en ajoutant un caractère # au début de la ligne.

      # dns=dnsmasq

      Enregistrez et fermez le fichier.

    3. 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 :

    1. Désactivez le dnsmasq service:

      $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
    2. 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.

    1. Connectez-vous à l’hôte Ubuntu ou Debian en tant qu’utilisateur avec les privilèges sudo.

    2. Modifiez le fichier /etc/default/grub. Ajoutez ou modifiez la ligne GRUB_CMDLINE_LINUX pour ajouter les deux paires clé-valeur suivantes:

      GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

      Enregistrez et fermez le fichier.

    3. 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