docker
Installer Docker en mode rootless
🐳 Procédure complète pour installer Docker en mode rootless pour un utilisateur dédié (dockeruser), avec les conteneurs et les données Docker dans son répertoire home (/home/dockeruser).
Elle installe d’abord les paquets Docker depuis le dépôt officiel Docker pour Debian, puis configure le daemon en mode rootless. Le script https://get.docker.com/rootless configure ce mode Rootless, mais ne remplace pas l’installation de Docker Engine, Docker CLI, des extras Rootless, de Buildx, de Compose et de containerd.
Cette procédure tient compte d’un point important : une session ouverte avec su - dockeruser ne dispose pas forcément de XDG_RUNTIME_DIR ni du bus D-Bus utilisateur. Dans ce cas, systemctl --user ne peut pas gérer Docker directement. La procédure ci-dessous prévoit donc la création et l’utilisation du gestionnaire systemd utilisateur.
1. 🧰 Prérequis système (en root)
apt update
apt install -y ca-certificates curl uidmap dbus-user-session slirp4netns fuse-overlayfs
# Créer l'utilisateur dédié si nécessaire
adduser --disabled-password --gecos "" dockeruser
2. 🐳 Installer les paquets Docker depuis le dépôt officiel Docker
Ajouter la clé et le dépôt Docker officiel pour Debian :
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat <<EOF > /etc/apt/sources.list.d/docker.sources
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
Installer Docker Engine et ses composants :
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
Vérifier les paquets installés :
dpkg -l | grep -E 'docker|containerd'
⚠️ Ne pas installer le paquet Debian
docker.ioen parallèle des paquets du dépôt officiel Docker.
3. 🔢 Configurer subuid et subgid
Docker rootless a besoin d’une plage d’au moins 65 536 UID/GID subordonnés.
Vérifier la configuration existante :
grep dockeruser /etc/subuid /etc/subgid
L’objectif est d’avoir une seule plage de 65 536 identifiants dans chaque fichier :
/etc/subuid:dockeruser:165536:65536
/etc/subgid:dockeruser:165536:65536
Si aucune plage n’existe, ajouter :
usermod --add-subuids 165536-231071 dockeruser
usermod --add-subgids 165536-231071 dockeruser
Si une plage incorrecte existe déjà, la supprimer puis ajouter la plage complète. Par exemple :
usermod --del-subuids 165536-199999 dockeruser
usermod --del-subgids 165536-199999 dockeruser
usermod --add-subuids 165536-231071 dockeruser
usermod --add-subgids 165536-231071 dockeruser
Vérifier :
grep dockeruser /etc/subuid /etc/subgid
4. 🔁 Activer le lingering
loginctl enable-linger dockeruser
Vérifier :
loginctl show-user dockeruser
La sortie doit notamment contenir :
Linger=yes
5. 🧩 Démarrer le gestionnaire systemd utilisateur
Récupérer l’UID de l’utilisateur :
id -u dockeruser
Dans cet exemple, l’UID est 1001.
Démarrer le gestionnaire systemd utilisateur :
systemctl start user@1001.service
Vérifier son état :
systemctl status user@1001.service --no-pager
Puis vérifier que le répertoire runtime existe :
ls -ld /run/user/1001
6. ⚙️ Installer Docker rootless
Passer sur l’utilisateur dédié :
su - dockeruser
curl -fsSL https://get.docker.com/rootless | sh
Ce script installe/configure les éléments nécessaires au fonctionnement du daemon en mode Rootless et crée notamment le lanceur dockerd-rootless.sh. Il ne remplace pas l’étape précédente : les paquets docker-ce, docker-ce-cli, docker-ce-rootless-extras, docker-buildx-plugin, docker-compose-plugin et containerd.io restent installés et gérés par APT.
Les binaires et scripts Rootless sont normalement installés dans :
/home/dockeruser/bin/
Docker Compose est fourni par le paquet docker-compose-plugin installé à l’étape 2. Vérifier sa version :
docker compose version
Revenir ensuite en root :
exit
7. 🛠️ Finaliser l’installation du daemon rootless
Si l’installation initiale n’a pas créé :
/home/dockeruser/.config/systemd/user/docker.service
exécuter l’outil de configuration rootless avec un environnement utilisateur systemd valide :
sudo -u dockeruser XDG_RUNTIME_DIR=/run/user/1001 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus PATH=/home/dockeruser/bin:/usr/local/bin:/usr/bin:/bin /home/dockeruser/bin/dockerd-rootless-setuptool.sh install
dockerd-rootless-setuptool.sh install sert à créer ou réparer la configuration du service Rootless. Une fois le service installé, il n’a normalement besoin d’être exécuté qu’une seule fois, et non à chaque mise à jour de Docker.
Vérifier :
ls -la /home/dockeruser/.config/systemd/user/
On doit notamment trouver :
docker.service
8. 🚀 Démarrer et activer Docker
Depuis root :
systemctl --machine=dockeruser@ --user enable --now docker
Vérifier si nécessaire :
systemctl --machine=dockeruser@ --user status docker
9. 🖥️ Configurer les variables d’environnement
Ajouter dans /home/dockeruser/.bashrc :
export PATH=/home/dockeruser/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
Puis recharger :
source ~/.bashrc
⚠️ Une session ouverte avec
su - dockeruserpeut ne pas définirXDG_RUNTIME_DIR. Dans ce cas,systemctl --userpeut échouer avec une erreur concernantDBUS_SESSION_BUS_ADDRESSetXDG_RUNTIME_DIR.
10. ✅ Vérifier Docker rootless
Depuis root :
sudo -u dockeruser XDG_RUNTIME_DIR=/run/user/1001 DOCKER_HOST=unix:///run/user/1001/docker.sock /home/dockeruser/bin/docker info
La sortie doit notamment contenir :
Security Options:
seccomp
Profile: builtin
rootless
cgroupns
La présence de rootless confirme que Docker fonctionne bien en mode rootless.
Tester également un conteneur :
sudo -u dockeruser XDG_RUNTIME_DIR=/run/user/1001 DOCKER_HOST=unix:///run/user/1001/docker.sock /home/dockeruser/bin/docker run hello-world
Vérifier également les versions des composants installés :
docker version
docker compose version
docker buildx version
11. 🔄 Mettre à jour Docker
Les composants Docker installés à l’étape 2 sont mis à jour par APT, comme les autres paquets Debian. Il n’est pas nécessaire de relancer get.docker.com/rootless ni dockerd-rootless-setuptool.sh install après une mise à jour normale.
apt update
apt upgrade
Pour mettre à jour uniquement les composants Docker :
apt install --only-upgrade -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
Vérifier ensuite le service Rootless :
systemctl --machine=dockeruser@ --user status docker
12. 📦 Emplacement des données Docker
Les données Docker sont stockées dans :
/home/dockeruser/.local/share/docker
Le socket Docker est :
/run/user/1001/docker.sock
⚠️ Points d’attention généraux
- 🔒 Ports privilégiés (< 1024) : non accessibles directement en rootless. Utiliser un reverse proxy frontal ou configurer spécifiquement les capacités nécessaires.
- 🔀 Remapping UID/GID : les UID/GID internes des conteneurs sont remappés selon la plage définie dans
/etc/subuidet/etc/subgid. À prendre en compte pour les permissions des volumes montés. - ⚙️ Avertissements cgroups : des messages comme
No cpuset supportouNo io.weight supportpeuvent apparaître. Ils ne sont pas bloquants pour le fonctionnement général de Docker. - 🔌 Socket Docker : ne pas utiliser
/var/run/docker.sockpour cette installation rootless. Le socket est/run/user/<UID>/docker.sock.