
Ce guide vous montre comment installer et utiliser Harbor pour stocker vos images conteneur, scanner automatiquement les vulnérabilités et éviter les problèmes de rate limiting Docker Hub. Vous apprendrez à déployer Harbor via Docker Compose, configurer le proxy-cache pour mettre en cache Docker Hub, et créer des comptes robot pour vos pipelines CI/CD. Prérequis : un serveur Linux avec Docker installé.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer Harbor en production avec HTTPS
- Comprendre l'architecture et les fonctionnalités clés
- Configurer le proxy-cache pour Docker Hub (éviter le rate limiting)
- Créer des comptes robot pour vos pipelines CI/CD
- Scanner automatiquement les images avec Trivy
- Répliquer des images entre plusieurs registries
Qu'est-ce que Harbor ?
Section intitulée « Qu'est-ce que Harbor ? »Harbor est un registre d'artefacts cloud-native open source, développé initialement par VMware et désormais projet CNCF graduated (le plus haut niveau de maturité). Pensez à Harbor comme un Docker Hub privé hébergé dans votre infrastructure, avec des fonctionnalités de sécurité intégrées.
Pourquoi ne pas utiliser Docker Hub directement ?
Section intitulée « Pourquoi ne pas utiliser Docker Hub directement ? »Docker Hub, le registre public par défaut, pose plusieurs problèmes en entreprise :
| Problème | Impact | Solution Harbor |
|---|---|---|
| Rate limiting | 100 pulls/6h en anonyme, builds CI/CD bloqués | Proxy-cache : 1 pull externe → N pulls internes |
| Disponibilité | Pannes Docker Hub = arrêt des déploiements | Images mises en cache localement |
| Sécurité | Pas de scan de vulnérabilités intégré | Trivy scanne chaque push automatiquement |
| Conformité | Images stockées chez un tiers (USA) | Données dans votre datacenter |
| Coût | Plans payants pour features avancées | Open source, fonctionnalités complètes |
Ce que Harbor gère
Section intitulée « Ce que Harbor gère »Harbor ne se limite plus aux images Docker. Depuis la version 2.x, il stocke également :
- Images de conteneurs : Docker, OCI, multi-architectures
- Helm charts : charts Kubernetes versionnés
- SBOM (depuis v2.11) : Software Bill of Materials pour la traçabilité
- Artefacts IA/ML (depuis v2.13) : modèles via CloudNativeAI
Architecture de Harbor
Section intitulée « Architecture de Harbor »Harbor est composé de plusieurs services qui communiquent entre eux. Comprendre cette architecture vous aidera à diagnostiquer les problèmes et à dimensionner correctement votre installation.
Composants principaux :
| Composant | Rôle | Pourquoi c'est important |
|---|---|---|
| NGINX | Reverse proxy, terminaison TLS | Point d'entrée unique, gestion HTTPS |
| Core | API REST, authentification, autorisation | Cerveau de Harbor |
| Registry | Stockage des images (Docker Distribution) | Où vos images sont réellement stockées |
| Trivy | Scan de vulnérabilités | Détecte les CVE dans vos images |
| JobService | Tâches asynchrones (réplication, scan, GC) | Travaux en arrière-plan |
| PostgreSQL | Base de données | Métadonnées, utilisateurs, projets |
| Redis | Cache et sessions | Performance et sessions utilisateurs |
Fonctionnalités de sécurité intégrées
Section intitulée « Fonctionnalités de sécurité intégrées »Harbor intègre Trivy comme scanner de vulnérabilités par défaut. Chaque image poussée peut être automatiquement scannée pour détecter les CVE connues.
Workflow de scan :
- Un développeur pousse une image
- Harbor déclenche automatiquement Trivy
- Trivy analyse chaque couche de l'image
- Les résultats sont attachés à l'image dans l'interface
- Si des vulnérabilités critiques sont détectées, le pull peut être bloqué
Contrôle d'accès et authentification
Section intitulée « Contrôle d'accès et authentification »Harbor propose plusieurs méthodes d'authentification pour s'adapter à votre infrastructure :
- Base de données locale : pour les petites équipes ou les labs
- LDAP/Active Directory : intégration avec l'annuaire d'entreprise
- OIDC (OpenID Connect) : SSO avec Keycloak, Azure AD, Okta, Google
- Robot accounts : comptes techniques pour les pipelines CI/CD (voir section dédiée)
Installation de Harbor
Section intitulée « Installation de Harbor »Harbor peut être installé de deux manières selon votre environnement :
| Méthode | Cas d'usage | Complexité |
|---|---|---|
| Docker Compose | Lab, petite équipe, serveur dédié | Simple |
| Helm sur Kubernetes | Production, haute disponibilité, cloud | Moyenne |
Dans ce guide, nous couvrons les deux méthodes. Commencez par Docker Compose pour vous familiariser avec Harbor, puis passez à Helm pour la production.
Prérequis système
Section intitulée « Prérequis système »Configuration matérielle et logicielle requise :
| Ressource | Minimum (lab) | Recommandé (prod) | Pourquoi |
|---|---|---|---|
| CPU | 2 cores | 4 cores | Trivy consomme beaucoup lors des scans |
| RAM | 4 Go | 8 Go | PostgreSQL + Trivy + Redis |
| Disque | 40 Go | 160 Go+ | Dépend du volume d'images stockées |
Logiciels requis :
- Docker Engine 20.10.10+
- Docker Compose v2 (ou v1.18+)
- OpenSSL (pour générer les certificats)
Ports réseau à ouvrir :
| Port | Protocole | Usage |
|---|---|---|
| 443 | HTTPS | Portail Harbor et API (défaut) |
| 80 | HTTP | Redirection vers HTTPS |
| 4443 | HTTPS | Docker Content Trust (optionnel) |
Téléchargement de Harbor
Section intitulée « Téléchargement de Harbor »Téléchargez l'installeur depuis le dépôt officiel GitHub. Deux options :
| Installeur | Taille | Cas d'usage |
|---|---|---|
| Online | ~50 Mo | Télécharge les images depuis Docker Hub à l'installation |
| Offline | ~800 Mo | Images pré-incluses, pour environnements sans internet |
-
Télécharger l'archive
Fenêtre de terminal cd /optwget https://github.com/goharbor/harbor/releases/download/v2.15.2/harbor-offline-installer-v2.15.2.tgz -
Vérifier l'authenticité
Depuis fin 2025, Harbor ne signe plus ses archives en GPG (le fichier
.asca disparu) mais via Sigstore/cosign : un bundle.sigstore.jsonaccompagne chaque archive, plus un fichiermd5sum. Vérifiez d'abord l'intégrité, puis l'authenticité avec cosign :Fenêtre de terminal # Intégrité (md5)wget https://github.com/goharbor/harbor/releases/download/v2.15.2/md5sumgrep offline md5sum | md5sum -c -# Authenticité (Sigstore/cosign)wget https://github.com/goharbor/harbor/releases/download/v2.15.2/harbor-offline-installer-v2.15.2.tgz.sigstore.jsoncosign verify-blob \--bundle harbor-offline-installer-v2.15.2.tgz.sigstore.json \--certificate-identity-regexp 'https://github.com/goharbor/harbor' \--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \harbor-offline-installer-v2.15.2.tgz# Verified OK -
Extraire l'archive
Fenêtre de terminal tar xzvf harbor-offline-installer-v2.15.2.tgzcd harbor
Configuration de Harbor
Section intitulée « Configuration de Harbor »Le fichier harbor.yml contient toute la configuration de Harbor. Copiez le template et éditez-le :
cp harbor.yml.tmpl harbor.ymlvi harbor.ymlVoici les paramètres essentiels à configurer :
# Nom d'hôte ou IP publique (jamais localhost en production)hostname: registry.example.com
# Configuration HTTPS (obligatoire en production)https: port: 443 certificate: /opt/harbor/certs/server.crt private_key: /opt/harbor/certs/server.key
# Mot de passe admin initial (changez-le !)harbor_admin_password: VotreMotDePasseSecurise
# Répertoire de stockage des imagesdata_volume: /data
# Activer Trivy pour le scan de vulnérabilitéstrivy: ignore_unfixed: false # Inclure les CVE sans correctif security_check: vuln,config,secret skip_update: false # Mettre à jour la base de CVELancement de l'installation
Section intitulée « Lancement de l'installation »L'option --with-trivy active le scan de vulnérabilités :
sudo ./install.sh --with-trivyLe script vérifie les prérequis, génère les configurations et démarre les conteneurs. Une fois terminé :
✔ ----Harbor has been installed and started successfully.----Vous pouvez accéder à l'interface web d'Harbor via https://registry.example.com
(ou l'URL configurée dans hostname).
Installation via Helm (Kubernetes)
Section intitulée « Installation via Helm (Kubernetes) »Pour un déploiement sur Kubernetes en production, utilisez le chart Helm officiel. Cette méthode offre la haute disponibilité et une meilleure intégration avec l'écosystème cloud-native.
-
Ajouter le dépôt Helm Harbor
Fenêtre de terminal helm repo add harbor https://helm.goharbor.iohelm repo update -
Créer un fichier de values personnalisé
values-harbor.yaml expose:type: ingressingress:hosts:core: harbor.example.comtls:enabled: truecertSource: secretsecret:secretName: harbor-tlsexternalURL: https://harbor.example.compersistence:enabled: truepersistentVolumeClaim:registry:size: 100Gitrivy:enabled: trueharborAdminPassword: "VotreMotDePasseSecurise" -
Installer Harbor
Fenêtre de terminal helm install harbor harbor/harbor \--namespace harbor \--create-namespace \-f values-harbor.yaml -
Vérifier le déploiement
Fenêtre de terminal kubectl -n harbor get pods
Consultez la documentation Helm Harbor pour les options avancées (HA multi-réplicas, stockage S3, PostgreSQL externe...).
Premier accès
Section intitulée « Premier accès »Lors du premier accès à Harbor :
- Ouvrez
https://harbor.example.comdans votre navigateur - Connectez-vous avec
admin/Harbor12345(ou le mot de passe configuré) - Changez immédiatement le mot de passe via Administration → Users

Utiliser Harbor au quotidien
Section intitulée « Utiliser Harbor au quotidien »Cette section couvre les opérations courantes : pousser une image, la récupérer, et comprendre le scan de vulnérabilités.
Pousser votre première image
Section intitulée « Pousser votre première image »Prenons un exemple concret : vous avez une application web simple à conteneuriser.
-
Créer un projet dans Harbor
Avant de pousser une image, créez un projet dans l'interface Harbor : Projects → New Project → "monprojet". Un projet est comme un dossier qui regroupe des images liées (par application, par équipe, etc.).
-
Créer votre Dockerfile
FROM nginx:1.31.3-alpine@sha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752COPY index.html /usr/share/nginx/html/EXPOSE 80 -
Construire l'image
Fenêtre de terminal docker build -t monserveurweb:0.1 . -
Taguer l'image pour Harbor
Le format du tag est :
<harbor-url>/<projet>/<image>:<version>Fenêtre de terminal docker tag monserveurweb:0.1 registry.example.com/monprojet/monserveurweb:0.1 -
Se connecter à Harbor
Fenêtre de terminal docker login registry.example.com# Entrez vos identifiants Harbor -
Pousser l'image
Fenêtre de terminal docker push registry.example.com/monprojet/monserveurweb:0.1
Vérification : Dans l'interface Harbor, naviguez vers Projects → monprojet. Vous devriez voir votre image avec son tag 0.1.
Comprendre le scan de vulnérabilités
Section intitulée « Comprendre le scan de vulnérabilités »Une fois l'image poussée, Harbor déclenche automatiquement un scan Trivy (si configuré). Dans l'interface :
- Cliquez sur l'image pour voir ses tags
- Cliquez sur un tag pour voir le détail
- L'onglet Vulnerabilities affiche les CVE détectées

Interpréter les résultats :
| Sévérité | Signification | Action recommandée |
|---|---|---|
| Critical | Faille exploitable à distance, impact majeur | Corriger immédiatement |
| High | Faille sérieuse | Corriger rapidement |
| Medium | Faille modérée | Planifier la correction |
| Low | Faille mineure | Corriger quand possible |
Configurer le proxy-cache
Section intitulée « Configurer le proxy-cache »Le proxy-cache est l'une des fonctionnalités les plus utiles de Harbor. Il permet de mettre en cache les images de registries externes (Docker Hub, Quay, GCR...) pour :
- Éviter le rate limiting Docker Hub (100 pulls/6h en anonyme)
- Accélérer les pulls (images servies depuis votre réseau local)
- Garantir la disponibilité même si Docker Hub est en panne
Comment fonctionne le proxy-cache ?
Section intitulée « Comment fonctionne le proxy-cache ? »
Premier pull : Harbor récupère l'image depuis Docker Hub, la stocke localement, et la sert au client.
Pulls suivants : Harbor sert l'image depuis son cache local. Docker Hub n'est pas contacté (sauf pour vérifier les mises à jour).
Configurer un proxy-cache Docker Hub
Section intitulée « Configurer un proxy-cache Docker Hub »-
Créer un endpoint de registry
Dans l'interface Harbor : Administration → Registries → New Endpoint
Champ Valeur Provider Docker Hub Name dockerhub Endpoint URL https://hub.docker.com Access ID (optionnel, votre username Docker Hub) Access Secret (optionnel, votre token Docker Hub) Cliquez sur Test Connection pour vérifier, puis OK.
-
Créer un projet proxy-cache
Projects → New Project
Champ Valeur Project Name dockerhub-proxy Access Level Public (ou Private selon vos besoins) Proxy Cache ✅ Activé Registry dockerhub (l'endpoint créé à l'étape 1) -
Utiliser le proxy-cache
Au lieu de :
Fenêtre de terminal docker pull nginx:latestUtilisez :
Fenêtre de terminal docker pull registry.example.com/dockerhub-proxy/library/nginx:latestPour les images non-officielles :
Fenêtre de terminal docker pull registry.example.com/dockerhub-proxy/bitnami/redis:latest
Registries supportés
Section intitulée « Registries supportés »Harbor supporte le proxy-cache pour de nombreux registries :
- Docker Hub
- Quay.io
- GitHub Container Registry (ghcr.io)
- AWS ECR
- Azure ACR
- Google Container Registry
- JFrog Artifactory
Comptes robot pour la CI/CD
Section intitulée « Comptes robot pour la CI/CD »Les robot accounts sont des comptes techniques conçus pour les pipelines CI/CD. Contrairement aux comptes utilisateurs, ils :
- N'ont pas accès à l'interface web
- Ont des permissions limitées (push/pull uniquement)
- Peuvent être révoqués sans impacter les utilisateurs
- Ont une durée de vie configurable
Créer un compte robot
Section intitulée « Créer un compte robot »-
Naviguer vers le projet
Projects → votre-projet → Robot Accounts
-
Créer le robot
Cliquez sur New Robot Account :
Champ Valeur recommandée Name ci-pipeline Expiration 365 jours (ou selon votre politique) Permissions Push Artifact, Pull Artifact -
Sauvegarder les credentials
Harbor affiche le token une seule fois. Copiez-le immédiatement et stockez-le dans votre gestionnaire de secrets (Vault, GitLab CI variables, GitHub Secrets...).
Utiliser dans GitLab CI
Section intitulée « Utiliser dans GitLab CI »variables: HARBOR_URL: registry.example.com HARBOR_PROJECT: monprojet
build: stage: build script: - docker login -u "${HARBOR_ROBOT_USER}" -p "${HARBOR_ROBOT_TOKEN}" ${HARBOR_URL} - docker build -t ${HARBOR_URL}/${HARBOR_PROJECT}/myapp:${CI_COMMIT_SHA} . - docker push ${HARBOR_URL}/${HARBOR_PROJECT}/myapp:${CI_COMMIT_SHA}Les variables HARBOR_ROBOT_USER et HARBOR_ROBOT_TOKEN sont définies dans Settings → CI/CD → Variables (type "masked").
Réplication entre registries
Section intitulée « Réplication entre registries »La réplication permet de synchroniser des images entre plusieurs instances Harbor ou vers d'autres registries. Cas d'usage :
- Multi-datacenter : répliquer les images vers un site de DR
- Edge computing : pré-pousser les images vers des clusters edge
- Migration : copier des images depuis un ancien registry
Modes de réplication
Section intitulée « Modes de réplication »| Mode | Direction | Cas d'usage |
|---|---|---|
| Push | Harbor → External | Distribuer vers d'autres registries |
| Pull | External → Harbor | Importer depuis Docker Hub, GCR, etc. |
Configurer une réplication push
Section intitulée « Configurer une réplication push »-
Créer l'endpoint de destination
Administration → Registries → New Endpoint
Configurez l'accès au registry de destination (Harbor distant, ECR, etc.).
-
Créer une règle de réplication
Administration → Replications → New Replication Rule
Champ Valeur Name prod-datacenter-2 Replication mode Push-based Source resource filter monprojet/** Destination registry (l'endpoint créé) Trigger mode Event Based (à chaque push) -
Tester la réplication
Poussez une image dans le projet source. Elle devrait apparaître dans le registry de destination après quelques secondes.
Dépannage
Section intitulée « Dépannage »Les problèmes avec Harbor se manifestent généralement de deux façons : l'interface est inaccessible ou les opérations Docker échouent (login, push, pull). Voici les causes les plus fréquentes.
Problèmes d'installation
Section intitulée « Problèmes d'installation »| Symptôme | Cause probable | Solution |
|---|---|---|
| Harbor ne démarre pas | Conteneur en erreur | docker compose ps puis logs du conteneur en échec |
| Erreur "port already in use" | Port 443/80 déjà utilisé | Arrêter le service conflictuel ou changer le port |
| Interface inaccessible | HTTPS mal configuré | Vérifier les chemins des certificats dans harbor.yml |
| Erreur base de données | PostgreSQL corrompu | Vérifier les logs PostgreSQL dans /var/log/harbor/ |
Problèmes de connexion Docker
Section intitulée « Problèmes de connexion Docker »| Symptôme | Cause probable | Solution |
|---|---|---|
x509: certificate signed by unknown authority | Certificat auto-signé non trusté | Ajouter le CA au système (voir ci-dessous) |
unauthorized: authentication required | Mauvais credentials | Vérifier username/password, refaire docker login |
denied: requested access to the resource is denied | Permissions insuffisantes | Vérifier les droits sur le projet Harbor |
| Timeout lors du push | Réseau ou firewall | Vérifier la connectivité sur le port 443 |
Faire confiance à un certificat auto-signé
Section intitulée « Faire confiance à un certificat auto-signé »Si vous utilisez un certificat auto-signé (lab), vous devez l'ajouter au système :
# Copier le certificat CAsudo cp ca.crt /usr/local/share/ca-certificates/harbor-ca.crtsudo update-ca-certificates
# Redémarrer Dockersudo systemctl restart docker# Copier le certificat CAsudo cp ca.crt /etc/pki/ca-trust/source/anchors/harbor-ca.crtsudo update-ca-trust
# Redémarrer Dockersudo systemctl restart dockerConsulter les logs
Section intitulée « Consulter les logs »Les logs Harbor sont stockés dans /var/log/harbor/ avec un fichier par composant :
# Logs du composant core (API)tail -f /var/log/harbor/core.log
# Logs du registrytail -f /var/log/harbor/registry.log
# Logs Trivy (scanner)tail -f /var/log/harbor/trivy-adapter.logPour les installations Helm, utilisez kubectl :
kubectl -n harbor logs deployment/harbor-core -fÀ retenir
Section intitulée « À retenir »- Harbor est un registre d'artefacts cloud-native qui stocke images Docker, Helm charts, SBOM et artefacts IA
- Le proxy-cache résout le rate limiting Docker Hub : 1 pull externe → N pulls internes
- Trivy scanne automatiquement les images pour détecter les CVE
- Les robot accounts sont essentiels pour la CI/CD : credentials dédiés, révocables, avec permissions minimales
- La réplication permet le multi-datacenter et la haute disponibilité
- HTTPS est obligatoire en production ; Docker refuse les registries HTTP par défaut
- Projet CNCF graduated = maturité et pérennité garanties