Introduction
Harbor est une solution de registry Docker d’entreprise et Open Source de VMware.
C’est un serveur permettant de stocker « on premise » ou dans le cloud des images Docker, au même titre que le produit historiquement appelé Docker Registry (maintenant Docker Distribution), mais avec des fonctionnalités supplémentaires, notamment :
- Gestion de la sécurité, des comptes, rôles, habilitation (RBAC)
- Réplication des images entre plusieurs instances de Harbor
- Portail web
- Logging de toutes les opérations à des fins d’audit
- API RESTful
- Scan de vulnérabilité intégré
- Nettoyage automatique des images inutiles (garbage collection)
- Intégration native avec Notary pour la signature des images
Par rapport à Docker Distribution, Harbor offre de meilleures performances et une meilleure sécurité.
Harbor résout les problèmes communs en instaurant la confiance, la conformité, les performances et l'interopérabilité. Il comble une lacune pour les organisations et les applications qui ne peuvent pas utiliser un registre public ou basé sur un nuage, ou qui souhaitent une expérience cohérente dans le cloud.
Harbor est déployé en tant que conteneurs Docker. Par conséquent, les distributions Linux prenant en charge Docker sont obligatoires. Harbor ne limite pas son installation à un système d'exploitation spécifique. Vous pouvez utiliser n'importe quel système d'exploitation de votre choix. toutefois, les étapes d'installation varient en fonction du choix du système d'exploitation.
Harbor est hébergé par la Cloud Native Computing Foundation (CNCF).
Caractéristiques
- Cloud native registry : prenant en charge les images de conteneur et les Helm charts, Harbor sert de registre pour les environnements cloud ready tels que les environnements d'exécution de conteneur et les plates-formes d'orchestration.
- Contrôle d'accès basé sur les rôles : les utilisateurs et les référentiels sont organisés via des “projets” et un utilisateur peut disposer d'autorisations différentes pour les images d'un projet.
- Réplication d'images basée sur une stratégie : les images peuvent être répliquées (synchronisées) entre plusieurs instances de registre en fonction de stratégies avec plusieurs filtres (référentiel, balise et libellé). Harbor essaiera automatiquement de se répliquer s'il rencontre des erreurs. Idéal pour l'équilibrage de charge, la haute disponibilité, les scénarios multi-datacenter, hybrides et multi-cloud.
- Analyse des vulnérabilités : Harbor analyse régulièrement les images et avertit les utilisateurs des vulnérabilités.
- Prise en charge de LDAP / AD : Harbor s’intègre à l’authentification d’entreprise existante LDAP / AD pour la gestion des utilisateurs, et prend en charge l’importation de groupes LDAP dans Harbor et leur attribue les rôles de projet appropriés.
- Suppression d'images et récupération de place : les images peuvent être supprimées et leur espace peut être recyclé.
- Notary : l'authenticité de l'image peut être assurée.
- Portail utilisateur graphique : l'utilisateur peut facilement parcourir, rechercher dans des référentiels et gérer des projets.
- Audit : toutes les opérations sur les référentiels sont suivies.
- API RESTful : API RESTful pour la plupart des opérations administratives, faciles à intégrer à des systèmes externes.
- Déploiement facile : Fournit un programme d'installation en ligne et hors ligne.
Installation Harbor.io
Harbor peut être installé de deux manières différentes:
- Programme d'installation en ligne : le programme d'installation télécharge les images Harbor à partir du hub Docker. Pour cette raison, le programme d'installation est de très petite taille.
- Programme d'installation hors ligne : Utilisez ce programme d'installation lorsque l'hôte ne dispose pas d'une connexion Internet. Le programme d'installation contient des images prédéfinies d’où sa taille plus grande.
Tous les installateurs peuvent être téléchargés à partir de la page officielle.
Ce guide décrit les étapes à suivre pour installer et configurer Harbor à l’aide du programme d’installation en ligne ou hors ligne. Les processus d'installation sont presque les mêmes.
Si vous exécutez une version précédente de Harbor, vous devrez peut-être mettre à jour le fichier “harbor.cfg” et migrer les données pour les adapter au nouveau schéma de base de données. Pour plus de détails, veuillez vous reporter au Guide de migration de Harbor.
De plus, les instructions de déploiement sur Kubernetes ont été créées par la communauté. Reportez-vous à la documentation “Harbor on Kubernetes” pour plus de détails.
Prérequis pour l'hôte cible
Harbor est déployé sous la forme de plusieurs conteneurs Docker et peut donc être déployé sur toute distribution Linux prenant en charge Docker. L’hôte cible requiert l’installation de Python, Docker et Docker Compose.
Hardware
| Resource | Capacity | Description |
|---|---|---|
| CPU | minimum 2 CPU | 4 CPU préféré |
| Mem | minimum 4GB | 8GB préféré |
| Disk | minimum 40GB | 160GB préféré |
Software
| Software | Version | Description |
|---|---|---|
| Python | version 2.7 ou + | Notez que vous devrez peut-être installer Python sur des distributions Linux (Gentoo, Arch) qui ne sont pas fournies avec un interpréteur Python installé par défaut. |
| Docker engine | version 1.10 ou + | Pour les instructions d'installation, veuillez vous référer à: https://docs.docker.com/engine/installation |
| Docker Compose | version 1.6.0 ou + | Pour les instructions d'installation, veuillez vous référer à: https://docs.docker.com/compose/install/ |
| Openssl | Dernière version | Générer un certificat et des clés pour Harbor |
Network ports
| Port | Protocol | Description |
|---|---|---|
| 443 | HTTPS | Le portail Harbor et l'API principale accepteront les requêtes sur ce port pour le protocole https |
| 4443 | HTTPS | Connexions au service Docker Content Trust pour Harbor, nécessaires uniquement lorsque le notaire est activé |
| 80 | HTTP | Le portail Harbor et l'API principale accepteront les requêtes sur ce port pour le protocole http |
Packages - CentOS
Nous allons installer les packages suivants :
[root@registry ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
Nous allons déployer en plus les packages ci-dessous.
[root@registry ~]# yum install wget nano epel-release yum-utils
On ajoute le repository et on installe docker.
[root@registry ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo [root@registry ~]# yum install docker-ce [root@registry ~]# systemctl start docker [root@registry ~]# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. [root@registry ~]# curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose [root@registry ~]# chmod +x /usr/local/bin/docker-compose [root@registry ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Nous créerons un utilisateur “admdock” qui sera membre du groupe docker. Cela nous évitera de travailler avec “root”.
[root@registry ~]# useradd admdock [root@registry ~]# passwd admdock Changement de mot de passe pour l'utilisateur admdock. Nouveau mot de passe : MOT DE PASSE INCORRECT : Le mot de passe comporte moins de 8 caractères Retapez le nouveau mot de passe : passwd : mise à jour réussie de tous les jetons d'authentification. [root@registry ~]# usermod -a -G docker admdock [root@registry ~]# visudo -f /etc/sudoers.d/harbor admdock ALL=(ALL) NOPASSWD: ALL [root@registry ~]# su - admdock [admdock@registry ~]$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world d1725b59e92d: Pull complete Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Packages - Debian
Nous allons installer les packages suivants :
[root@registry ~]# apt update [root@registry ~]# apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
[root@registry ~]# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
On ajoute le repository et on installe docker.
[root@registry ~]# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" [root@registry ~]# apt update [root@registry ~]# apt -y install docker-ce docker-ce-cli containerd.io
[root@registry ~]# apt -y install docker-compose
Nous créerons un utilisateur “admdock” qui sera membre du groupe docker. Cela nous évitera de travailler avec “root”.
[root@registry ~]# useradd admdock [root@registry ~]# passwd admdock Changement de mot de passe pour l'utilisateur admdock. Nouveau mot de passe : MOT DE PASSE INCORRECT : Le mot de passe comporte moins de 8 caractères Retapez le nouveau mot de passe : passwd : mise à jour réussie de tous les jetons d'authentification. [root@registry ~]# usermod -aG docker admdock [root@registry ~]# visudo -f /etc/sudoers.d/harbor admdock ALL=(ALL) NOPASSWD: ALL [root@registry ~]# su - admdock [admdock@registry ~]$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world d1725b59e92d: Pull complete Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Installation Harbor
Maintenant que Docker est opérationnel sur notre serveur, nous allons procéder au déploiement d'harbor.
On passe en tant que “admdock” pour télécharger les sources d'harbor.
[root@registry ~]# su - admdock [admdock@registry ~]# curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep '\.tgz$' | wget -i - [admdock@registry ~]# tar xvzf harbor-offline-installer-v1.10.6.tgz
Maintenant, nous allons préparer nos certificats.
[admdock@registry ~]# mkdir cert && cd cert [admdock@registry ~]# openssl req -sha256 -x509 -days 365 -nodes -newkey rsa:4096 -keyout registry.oowy.lan.key -out registry.oowy.lan.crt Generating a 4096 bit RSA private key ............................++ .....................................................................................++ writing new private key to 'registry.oowy.lan.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:FR State or Province Name (full name) []:ESSONNE Locality Name (eg, city) [Default City]:EVRY Organization Name (eg, company) [Default Company Ltd]:oowy Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:registry.oowy.lan Email Address []:security@oowy.lan
Arriver à cette étape, nous avons les sources d'harbor ainsi que nos certificats de disponible. Il nous reste plus qu'à configurer le fichier “harbor.yml” avant de lancer l'installation.
Note:
Depuis la version 1.8 d'harbor, le fichier de configuration n'est plus au format 'ini' mais passe au format 'yml'
[admdock@registry ~]# cd ../harbor/ [admdock@registry ~]# nano harbor.yml # Configuration file of Harbor # The IP address or hostname to access admin UI and registry service. # DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients. hostname: registry.oowy.lan # http related config http: # port for http, default is 80. If https enabled, this port will redirect to https port port: 80 # https related config https: # # https port for harbor, default is 443 port: 443 # # The path of cert and key files for nginx certificate: /home/admdock/cert/registry.oowy.lan.crt private_key: /home/admdock/cert/registry.oowy.lan.key
Harbor a intégré Notary et Clair (pour le scan de vulnérabilité). Cependant, l'installation par défaut n'inclut pas les services Notary ou Clair.
Note:
Pour installer le service Harbor avec Notary, ajoutez un paramètre lorsque vous exécutez install.sh:
$ sudo ./install.sh --with-notary
Remarque: pour l'installation avec Notary, le paramètre “ui_url_protocol” doit être défini sur “https”.
Note:
Pour installer le service Harbor avec Clair, ajoutez un paramètre lorsque vous exécutez install.sh:
$ sudo ./install.sh --with-clair
Note:
Pour installer Harbor avec le service chartmuseum, ajoutez un paramètre lorsque vous exécutez install.sh:
$ sudo ./install.sh --with-chartmuseum
Note:
Remarque: Si vous souhaitez installer le service Notary, Clair et chartmuseum, vous devez spécifier tous les paramètres dans la même commande:
$ sudo ./install.sh --with-notary --with-clair --with-chartmuseum
On lance l'installation par défaut avec l'installer fournis dans le “tar.gz”
"harbor_harbor" with the default driver Creating network "harbor_harbor-clair" with the default driver Creating network "harbor_harbor-notary" with the default driver Creating network "harbor_harbor-chartmuseum" with the default driver Creating network "harbor_notary-sig" with the default driver Creating harbor-log ... done Creating harbor-db ... done Creating harbor-portal ... done Creating registry ... done Creating registryctl ... done Creating redis ... done Creating chartmuseum ... done Creating clair ... done Creating notary-signer ... done Creating harbor-core ... done Creating clair-adapter ... done Creating harbor-jobservice ... done Creating nginx ... done Creating notary-server ... done ✔ ----Harbor has been installed and started successfully.----
Administration Harbor
Accès à la plateforme
Se connecter sur l'interface : https://registry.oowy.lan avec les accès suivants :
Login : admin Pass : Harbor12345
Arrêt / Relance Harbor
Arrêter Harbor.
[admdock@registry harbor]$ sudo docker-compose stop Stopping nginx ... done Stopping harbor-portal ... done Stopping harbor-jobservice ... done Stopping harbor-core ... done Stopping registry ... done Stopping redis ... done Stopping registryctl ... done Stopping harbor-db ... done Stopping harbor-log ... done
Relancer Harbor.
[admdock@registry harbor]$ sudo docker-compose start Starting log ... done Starting registry ... done Starting registryctl ... done Starting postgresql ... done Starting core ... done Starting portal ... done Starting redis ... done Starting jobservice ... done Starting proxy ... done
Update config
Pour modifier la configuration de Harbor, arrêtez d'abord l'instance Harbor existante et mettez à jour “harbor.yml”. Ensuite, exécutez le script “prepare” pour renseigner la configuration.
Enfin, recréez et démarrez l'instance de Harbor:
[admdock@registry harbor]$ sudo docker-compose down -v [admdock@registry harbor]$ vim harbor.yml [admdock@registry harbor]$ sudo prepare [admdock@registry harbor]$ sudo docker-compose up -d
Suppression data
Suppression des conteneurs de Harbor tout en conservant les données d'image et les fichiers de base de données de Harbor dans le système de fichiers :
[admdock@registry harbor]$ sudo docker-compose down -v
Suppression de la base de données et des données de Harbor (pour une réinstallation propre):
[admdock@registry harbor]$ rm -r /data/database [admdock@registry harbor]$ rm -r /data/registry
Gestion de la plateforme
Après avoir installé le serveur de registre Harbor, la prochaine action est probablement la bonne gestion des utilisateurs. La méthode d'authentification utilisateur standard dans la plupart des entreprises est LDAP/AD. Il n'est pas justifié de gérer une base de données utilisateur distincte pour l'authentification Harbor si vous utilisez un serveur LDAP.
Nous allons donc configurer le backend LDAP comme base de données pour l'authentification des utilisateurs.
Les pré-requis pour cette configuration sont:
- Serveur LDAP existant ( Active Directory / FreeIPA)
- Registre Harbor installé et fonctionnel
- Administrateur LDAP
Authentification FreeIPA
Création d'un compte de service
Accédez à votre serveur LDAP et créez un compte qui sera utilisé par Harbor pour se lier au serveur.
Configurer LDAP sur Harbor
Accédez maintenant au tableau de bord d'administration de Harbor et accédez à Administration > Configuration > Authentification
Modifiez vos paramètres comme ci-dessous :
Auth Mode: LDAP LDAP URL: ldap.example.com LDAP Search DN: uid=service,cn=users,cn=accounts,dc=example,dc=com LDAP Search Password: LDAP-Bind-User-Password LDAP Base DN: cn=users,cn=accounts,dc=example,dc=com LDAP UID: uid
Auth Mode: Set authentication mode to LDAP LDAP URL: LDAP Server URL LDAP Search DN: DN for user with permissions to search LDAP server. LDAP Search Password: Search user password LDAP Base DN: The base DN from which to lookup a user LDAP UID: Attribute used in a search to match a user
Une fois terminé, cliquez sur le bouton «TESTER LE SERVEUR LDAP» pour valider les paramètres.
Authentification AD
Accédez à votre serveur Active Directory et créez un compte qui sera utilisé par Harbor pour se lier au serveur.
Configurer AD sur Harbor
Accédez maintenant au tableau de bord d'administration de Harbor et accédez à Administration > Configuration > Authentification
Modifiez vos paramètres comme ci-dessous :
Auth Mode: LDAP LDAP URL: ldap.example.com LDAP Search DN: <Service_Account>@<DOMAIN> LDAP Search Password: LDAP-Bind-User-Password LDAP Base DN: dc=example,dc=com LDAP UID: sAMAccountName
Auth Mode: Set authentication mode to LDAP LDAP URL: LDAP Server URL LDAP Search DN: DN for user with permissions to search LDAP server. LDAP Search Password: Search user password LDAP Base DN: The base DN from which to lookup a user LDAP UID: Attribute used in a search to match a user
Test de connexion FreeIPA/AD
Testez la connexion sur le portail Web Harbor pour confirmer que les utilisateurs sur LDAP peuvent accéder au service.
Saisissez le nom d'utilisateur et le mot de passe LDAP pour accéder au tableau de bord Harbor.
Vous devez vous authentifier pour accéder à la registre Harbor en CLI.
$ docker login registry.example.com Authenticating with existing credentials... Existing credentials are invalid, please enter valid username and password Username: USER_LDAP Password: <LDAPPassword> Login Succeeded!
Push image
Pull image
Role Based Access Control (RBAC)
Harbor gère les images à travers des projets. Les utilisateurs peuvent être ajoutés à un projet en tant que membre avec l'un des différents rôles suivants:
- Invité limité: un invité limité ne dispose pas de privilèges de lecture complets pour un projet. Ils peuvent extraire des images mais ne peuvent pas pousser, et ils ne peuvent pas voir les journaux ou les autres membres d'un projet. Par exemple, vous pouvez créer un nombre limité d'invités pour les utilisateurs de différentes organisations qui partagent l'accès à un projet.
- Invité: l'invité a le privilège de lecture seule pour un projet spécifié. Ils peuvent tirer et repérer des images, mais ne peuvent pas pousser.
- Développeur: le développeur dispose des privilèges de lecture et d'écriture pour un projet.
- Master: Master a des autorisations élevées au-delà de celles de «Developer», y compris la possibilité de numériser des images, d'afficher des travaux de réplication et de supprimer des images et des graphiques de barre.
- ProjectAdmin: Lors de la création d'un nouveau projet, le rôle “ProjectAdmin” vous sera attribué au projet. Outre les privilèges de lecture-écriture, le “ProjectAdmin” dispose également de certains privilèges de gestion, tels que l'ajout et la suppression de membres, le démarrage d'une analyse de vulnérabilité.
Outre les rôles ci-dessus, il existe deux rôles au niveau du système:
- Harbor system administrator: “Harbor system administrator” a le plus de privilèges. En plus des privilèges mentionnés ci-dessus, “Harbor system administrator” peut également répertorier tous les projets, définir un utilisateur ordinaire en tant qu'administrateur, supprimer des utilisateurs et définir une stratégie de scan de vulnérabilité pour toutes les images. La «bibliothèque» du projet public appartient également à l'administrateur.
- Anonyme: Lorsqu'un utilisateur n'est pas connecté, l'utilisateur est considéré comme un utilisateur “anonyme”. Un utilisateur anonyme n'a pas accès aux projets privés et a un accès en lecture seule aux projets publics.
Gérer des projets
Un projet dans Harbor contient tous les référentiels d'une application. Aucune image ne peut être envoyée à Harbor avant la création du projet. La RBAC s'applique à un projet.
Il existe deux types de projets à Harbor:
- Public: Tous les utilisateurs ont le privilège de lecture sur un projet public, il est pratique pour vous de partager certains référentiels avec d'autres de cette manière.
- Privé: un projet privé n'est accessible qu'aux utilisateurs disposant des privilèges appropriés.
Vous pouvez créer un projet après vous être connecté. Cochez la case “Access Level” pour rendre ce projet public.
une fois le projet créé, vous pouvez parcourir les Repositories, Membres, Logs, Réplication et la Configuration à l'aide de l'onglet de navigation.
Il existe deux vues pour afficher les Repositories, en mode liste ou carte, vous pouvez basculer entre eux en cliquant sur l'icône correspondante.
Les propriétés du projet peuvent être modifiées en cliquant sur “Configuration”.
- Pour rendre tous les référentiels du projet accessibles à tous, cochez la case Public.
- Pour empêcher l'extraction d'images non signées sous le projet, cochez la case Enable content trust.
Update de la plateforme
Dans la procédure suivante, nous allons mettre à jour notre registry à jour de la version 1.9.3 vers la version 1.9.4.
Connectez-vous à l'hôte sur lequel Harbor s'exécute, arrêtez et supprimez l'instance Harbor si elle est toujours en cours d'exécution:
[admdock@registry ]$ cd harbor [admdock@registry harbor]$ sudo docker-compose down -v Stopping harbor-jobservice ... done Stopping nginx ... done Stopping harbor-core ... done Stopping registryctl ... done Stopping registry ... done Stopping harbor-db ... done Stopping harbor-portal ... done Stopping redis ... done Stopping harbor-log ... done Removing harbor-jobservice ... done Removing nginx ... done Removing harbor-core ... done Removing registryctl ... done Removing registry ... done Removing harbor-db ... done Removing harbor-portal ... done Removing redis ... done Removing harbor-log ... done Removing network harbor_harbor
Sauvegardez les fichiers actuels de Harbor afin de pouvoir revenir à la version actuelle si nécessaire.
[admdock@registry ]$ mv harbour /my_backup_dir/harbour
Sauvegarder la base de données (par défaut dans le répertoire /data/database)
[admdock@registry ]$ cp -r /data/database/my_backup_dir/
Récupérer la dernière version du package Harbor de Github: https://github.com/goharbor/harbor/releases
Avant de mettre à niveau Harbor, effectuez d'abord la migration. L'outil de migration est fourni sous forme d'image docker.
Vous pouvez extraire l'image du docker hub. Remplacez [tag] par la version finale de Harbor (par exemple v1.9.4) dans la commande ci-dessous:
[admdock@registry ]$ docker pull goharbor/harbor-migrator:v1.9.4
Sous le répertoire ./harbor, exécutez le script ./install.sh pour installer la nouvelle instance Harbor.
Note:
N'oublier pas de mettre à jour le fichier "harbor.yml" avant de lancer l'installation.
Si vous choisissez d'installer Harbor avec des composants tels que Notary, Clair et chartmuseum, reportez-vous au Guide d'installation et de configuration pour plus d'informations.
Annexe
https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
https://github.com/goharbor/harbor/blob/master/docs/user_guide.md
Troubleshooting
Pour pouvoir pusher les images avec un certificat personnalisé
sudo cp registry.oowy.lan.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust sudo systemctl restart docker
If you want to disable user self registration, apply this setting in harbor.cfg:
self_registration = off
Recherche sur AD Microsoft
# ldapsearch -x -h ad01.oowy.lan -D "sa-harbor@oowy.lan" -W -b "dc=oowy,dc=lan" -s sub "(cn=*)" cn mail sn