Portainer est une interface web de gestion de conteneurs self-hosted, compatible Docker (Engine, Swarm), Docker Compose et Kubernetes. Elle couvre toutes les opérations courantes depuis un navigateur : déploiement de stacks Compose, gestion des conteneurs/images/volumes/réseaux, accès aux logs, exec dans les containers, et administration multi-environnements via un seul tableau de bord. C'est l'outil de référence pour les équipes qui veulent administrer Docker sans recourir exclusivement à la CLI.
Portainer existe en deux éditions : Community Edition (CE, licence zlib, gratuite) et Business Edition (BE, payante, avec RBAC avancé, intégration AD/LDAP, registre intégré, backups GitOps).
Informations essentielles
Origine : Portainer.io (Nouvelle-Zélande) · Licence : zlib (CE) / Commerciale (BE) · Architectures : x86_64, ARM64
Liens : Site officiel · Documentation · GitHub · Releases
Support : CE maintenu activement. Support commercial disponible avec BE.
Stack par défaut
| Composant | Valeur |
|---|---|
| Environnements supportés | Docker Engine, Docker Swarm, Kubernetes, Nomad |
| Agent | Portainer Agent pour les environnements distants |
| Stockage config | Volume Docker (portainer_data) |
| Auth | Local, LDAP, OAuth (BE) |
| Port | 9443 (HTTPS), 9000 (HTTP) |
Prérequis
| Ressource | Valeur |
|---|---|
| Docker | Engine installé |
| Ports ouverts | 9443 (UI HTTPS), 8000 (agent edge tunnel) |
| RAM | ~200 Mo pour le container Portainer |
Installation
Docker (mode standalone)
# Créer le volume de données
docker volume create portainer_data
# Démarrer Portainer CE
docker run -d \
--name portainer \
--restart always \
-p 8000:8000 \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
# Accéder à l'UI
# https://localhost:9443
# Premier démarrage : créer le compte admin
Docker Compose
# docker-compose.yml
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "9443:9443"
- "8000:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:
Kubernetes (via Helm)
helm repo add portainer https://portainer.github.io/k8s/
helm repo update
helm install portainer portainer/portainer \
--namespace portainer --create-namespace \
--set service.type=LoadBalancer
kubectl get svc -n portainer
# Accéder via l'IP externe sur le port 9443
Vérification de l'installation
# Docker
docker ps | grep portainer
# portainer doit être Up
# Accéder à l'UI
curl -k https://localhost:9443/api/system/status
# {"Version": "2.x.x", ...}
# Premier démarrage : définir le mot de passe admin dans les 5 minutes
# (sinon Portainer se met en mode timeout sécurité)
Pièges courants
| Symptôme | Cause | Correction |
|---|---|---|
| "Timeout initializing admin" | UI non ouverte dans les 5 min après démarrage | Redémarrer le container Portainer |
| Pas de stacks visible | Stacks créées hors Portainer (CLI) | Portainer ne voit que ce qu'il a déployé ou adopté |
| Agent inaccessible | Port 9001 (agent) bloqué | Ouvrir le port 9001 entre Portainer et l'agent |
| Certificat auto-signé | Déploiement sans certificat custom | Importer un certificat dans Settings ou accepter le self-signed |
Utilisation
Déployer une stack Compose via l'UI
- Stacks → Add stack
- Coller le contenu du
docker-compose.ymlou pointer vers un repo Git - Définir les variables d'environnement
- Deploy the stack
Gérer un environnement Docker distant (Agent)
Sur l'hôte distant :
docker run -d \
--name portainer_agent \
--restart always \
-p 9001:9001 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
Dans l'UI Portainer : Environments → Add environment → Docker Standalone → entrer l'IP:9001 de l'hôte distant.
Mise à jour
# Arrêter et supprimer le container (les données sont dans le volume)
docker stop portainer && docker rm portainer
# Repull et relancer
docker pull portainer/portainer-ce:latest
docker run -d \
--name portainer \
--restart always \
-p 8000:8000 \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Troubleshooting
# Logs Portainer
docker logs portainer --tail 50
# Vérifier l'accès à Docker socket
docker exec portainer docker ps
# Réinitialiser le mot de passe admin (méthode officielle)
docker stop portainer
docker run --rm -v portainer_data:/data portainer/helper-reset-password --password "NouveauMotDePasse"
docker start portainer
Commandes utiles
# Voir l'état
docker ps | grep portainer
# Logs
docker logs portainer -f
# Arrêter
docker stop portainer
# Redémarrer
docker restart portainer
Ressources
- Documentation officielle : https://docs.portainer.io/
- Site officiel : https://www.portainer.io
- GitHub : https://github.com/portainer/portainer
- Releases : https://github.com/portainer/portainer/releases
- Templates Helm K8s : https://portainer.github.io/k8s/