Les Crash-Devs d'un Passionné

Les difficultées rencontrées de Docker Desktop sur Linux

/Catégorie/docker

Temps de lecture : 5 minutes

Il y a quelques semaines

docker
a mis à disposition son outil de gestion des containers sous Linux. Docker Desktop est très utilisé sur les OS Windows et Mac mais auparavant rien n'existait sous Linux. Je me suis hâté d'aller le tester

L'installation se passe bien et la procédure est bien expliquée ici https://docs.docker.com/desktop/setup/install/linux/ubuntu/

L'interface est similaire à ce que je connaissais sous Windows, je retrouve vite mes repères et cela m'aide grandement lorsque j'ai beaucoup de containers qui tournent

Mais cette joie fut de courte durée :

  1. Dans mon cas je modifie directement
    ~/.docker/docker.json
    en retirant l'instruction
    credsStore
    qui vaut
    desktop
  2. Cette action est à reproduire à chaque redémarrage du service
    docker
  • Docker Desktop s'exécute dans une VM, en effet l'équipe Docker a décidé de centraliser leur développement de cet outil sur toutes les plateformes en choisissant cette technique. Du coup sous Linux nous sommes obligés de passer par une sur-couche qui est nécessaire uniquement pour Docker Desktop (
    docker
    sous Linux utilise les outils du noyau). Et donc pour accéder au fichier log de ton container
    sudo docker inspect my-container --format='{{.LogPath}}'
    le chemin qui est retourné n'existe pas dans le container !
  1. Pour accéder à ton fichier de log tu dois passer par cette commande qui te connectes à la VM en sh:
     docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
  2. Et là tu es dans la VM, si tu veux par exemple vider ton fichier tu peux accéder au fichier maintenant
  • Lors de l'upgrade de mon Ubuntu en version 24.04, Docker Desktop ne démarrait plus, car Ubuntu a supprimé cette restriction
    apparmor_restrict_unprivileged_userns
  1. Workaround en attendant un fix :
    sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
  • Lorsque vous avez installé Docker Desktop, la communication se fait via un autre socket que vous retrouvez avec la commande
     docker context ls.
    Vous remarquez que l'ancien context
    default
    est conservé qui correspond à docker sans la version de Docker Desktop.
  1. Il se peut que vous ayez des containers qui tournent sur les 2 sockets, pensez bien à faire tourner tous vos containers sur une même socket sinon vous ne les verrez pas :
    docker context use desktop-linux

Ces différents points m'ont grandement ralenti mais il fallait que je change mes habitudes, c'est génant au début mais on s'y fait après.

Cependant le fait que cela tourne dans une VM me gêne car cela introduit des comportements non attendus, j'aimais l'idée de ne pas avoir de sur-couche.

Au début j'ai choisi cette solution, car le projet sur lequel je travaillais n'avait pas moins de 20 containers et lire la commande

docker ps
n'ait pas facile et je n'arrivais pas à trouver un outil agréable pour :

  • lire mes logs proprement
  • supprimer mes containers / images
  • faire un
    exec
    dans cette interface

Sauf qu'en cherchant bien j'ai découvert Portainer et c'est exactement ce que je cherchais : très agréable et pas de VM

Au revoir Docker Desktop