J'essaye d'installer un registre privé de docker en utilisant l'image prise à partir de: https://github.com/docker/docker-registry
Juste en courant:docker run -p 5000:5000 registry
Je peux tirer/Push de/vers ce référentiel uniquement à partir de localhost, mais si j'essaie d'y accéder depuis une autre machine (en utilisant une adresse privée sur le même réseau local), il échoue avec un message d'erreur:
*2014/11/03 09:49:04 Error: Invalid registry endpoint https ://10.0.0.26:5000/v1/':
Get https:// 10.0.0.26:5000/v1/_ping: Forbidden. If this private
registry supports only HTTP or HTTPS with an unknown CA certificate,
please add `--insecure-registry 10.0.0.26:5000` to the daemon's
arguments. In the case of HTTPS, if you have access to the registry's
CA certificate, no need for the flag; simply place the CA certificate
at /etc/docker/certs.d/10.0.0.26:5000/ca.crt*
Ce qui me rend fou c'est que je peux y accéder avec succès en utilisant: curl 10.0.0.26:5000
et/ou curl 10.0.0.26:5000/v1/search
Je ne comprends pas non plus où et comment je devrais passer le drapeau --insecure-registry
.
OK - j'ai trouvé la solution à ce problème - après une journée de fouilles.
Pour le menu fixe inférieur à 1.12.1:
Il s'avère que la nouvelle version du client refuse de travailler avec un registre privé sans SSL.
Pour résoudre ce problème, le démon de la machine cliente doit être lancé avec l'indicateur non sécurisé:
Il suffit de taper:
Sudo service docker stop # to stop the service
puis
Sudo docker -d --insecure-registry 10.0.0.26:5000
(remplacez le 10.0.0.26
par votre propre adresse IP).
Je m'attendrais à ce que les gars du docker ajoutent cette option à la ligne de commande pull/push ...
Éditer - à titre facultatif - vous pouvez ajouter l'indicateur à la variable DOCKER_OPTS
env dans/etc/default/docker ..., puis à Sudo service docker restart
Modifier à nouveau - Il semble que les gars de docker sont sur - et un correctif viendra bientôt: https://github.com/docker/docker/pull/8935
Pour le menu fixe 1.12.1:
Veuillez suivre ci-dessous la réponse de vikas027 (valable pour centos)
C'est ce qui a fonctionné pour moi sur CentOS 7.2 et Docker 1.12.1 (le plus tard à la date). Mon registre privé v2 fonctionnait sur 192.168.1.88:5000
, changez-le en conséquence. Cela fonctionne aussi si vous avez plusieurs registres, continuez simplement à ajouter --insecure-registry IP:Port
$ Sudo vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.88:5000
$
$ Sudo systemctl stop docker
$ Sudo systemctl daemon-reload
$ systemctl start docker
Editez le fichier de configuration "/ etc/default/docker"
Sudo vi/etc/default/docker
ajouter la ligne à la fin du fichier
DOCKER_OPTS = "$ DOCKER_OPTS --insecure-registry = 192.168.2.170: 5000"
(remplacez le 192.168.2.170 par votre propre adresse IP)
et redémarrez le service Docker
Redémarrage du docker de service Sudo
J'ai trouvé les informations suivantes très utiles car elles expliquent comment le service Docker est configuré. https://docs.docker.com/articles/systemd/
Avec cet article sur la commande systemctl https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units
J'ai utilisé la série de commandes suivante dans un conteneur basé sur Centos 7 avec une image de registre obtenue par "docker pull registry: 2.1.1"
Sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
Sudo touch override.conf
Sudo nano override.conf
Et à l'intérieur de override.conf ajouté ce qui suit.
[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000
Notez que la première, vide, ExecStart = efface tout ce qui est déjà en place, alors assurez-vous d’ajouter quoi que ce soit de l’instruction /usr/lib/systemd/system/docker.service ExecStart = que vous souhaitez conserver.
Si vous ne spécifiez pas l'option -d (démon), vous obtiendrez une erreur "Veuillez ne spécifier qu'un seul -H".
Après avoir émis la série de commandes suivante, je peux voir mes remplacements en place.
Sudo systemctl stop docker
Sudo systemctl daemon-reload
Sudo systemctl start docker
Sudo systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
Drop-In: /etc/systemd/system/docker.service.d
└─override.conf
Active: active (running) since Thu 2015-09-17 13:37:34 AEST; 7s ago
Docs: https://docs.docker.com
Main PID: 5697 (docker)
CGroup: /system.slice/docker.service
└─5697 /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000
REMARQUE: Les informations fournies par les lignes Loaded: et Drop-In: du message d'état sont utiles pour vérifier le fonctionnement d'un démon docker préexistant.
REMARQUE: Consultez également le fichier Loaded: docker.service pour un fichier Environment = = afin de trouver des indices supplémentaires.
D'accord. Voici comment je l’ai fait fonctionner. Si vous voyez cette erreur dans docker 1.3.2 ou supérieur, faites ceci
aller à /etc/sysconfig/docker
other_args="--insecure-registry 10.0.0.26:5000"
et courir
Sudo service docker restart
utilisez la commande suivante en remplaçant {YOUR_REGISTRY} par votre registre
boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry {YOUR_REGISTRY}\"' | Sudo tee -a /var/lib/boot2docker/profile && Sudo /etc/init.d/docker restart"
modifier le fichier docker.service, ajouter --insecure-registry x.x.x.x après l'option -d, redémarrer le menu fixe
c'est la seule chose qui a fonctionné pour moi, le DOCKER_OPTS n'a eu aucun effet
Docker 1.12.1
Pour CentOS 7.2
/usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000
Pour buntu 16.04
/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://
Sudo systemctl stop docker
Sudo systemctl daemon-reload
Sudo systemctl start docker
Il semble que l'option --insecure-registry puisse être utilisée avec et sans le "=" entre elle et l'ID de registre.
J'ai trouvé que la version du client Docker et la version du docker du Registre doivent être identiques, sinon vous auriez des problèmes de connectivité, même si tout était en place.
Ceci est basé sur la réponse de vikas027 sur Centos 7 et Docker 1.12
Depuis que je suis derrière un proxy, ma solution complète était ...
/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="FTP_PROXY={{MY_PROXY}}"
Environment="ftp_proxy={{MY_PROXY}}"
Environment="HTTPS_PROXY={{MY_PROXY}}"
Environment="https_proxy={{MY_PROXY}}"
Environment="HTTP_PROXY={{MY_PROXY}}"
Environment="http_proxy={{MY_PROXY}}"
Environment="NO_PROXY=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"
Environment="no_proxy=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"
/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry {{MY_INSECURE_REGISTRY_IP}}:5000
et n'oubliez pas de redémarrer :)
Sudo systemctl daemon-reload; Sudo systemctl restart docker;
Solution en deux étapes (sans --insecure-registry
):
/etc/docker/certs.d/$HOSTNAME/
mkdir -p /etc/docker/certs.d/10.0.0.26:5000
echo -n | openssl s_client -connect 10.0.0.26:5000 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/10.0.0.26:5000/registry.crt
Votre docker va maintenant faire confiance à votre certificat auto-signé.
Pour vous épargner les tracas, pourquoi ne pas utiliser le service de registre privé GRATUIT de dockers fourni par gitlab - fonctionne très bien
https://about.gitlab.com/2016/05/23/gitlab-container-registry/
Leur registre est sécurisé, vous n'aurez donc aucun problème
En plus des réponses ci-dessus, j'ajoute ce qui a fonctionné dans "docker pour mac" pour moi:
Ce qui suit a été testé avec:
ubuntu@ubuntu-xenial:~$ docker -v
Docker version 17.05.0-ce, build 89658be
J'ai essayé toutes les réponses mentionnées ci-dessus, mais aucune d'entre elles n'a fonctionné pour moi.
Je suivais ces instructions afin de le faire fonctionner
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt
et
Linux: Copy the domain.crt file to /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt on every Docker Host. You do not need to restart Docker.
et d'autres problèmes sont survenus qui ont été résolus comme suit:
Numéro 1
Error response from daemon: Get https://10.20.30.40:8001/v1/users/: x509: cannot validate certificate for 10.20.30.40 because it doesn't contain any IP SANs
solution
Mappage d'hôtes dans/etc/hosts:
10.20.30.40 somehost
Numéro 2
Error response from daemon: Get https://somehost:8001/v1/users/: x509: certificate is valid for , not somehost
solution
réexécutez la commande openssl
$ openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt
appuyez sur entrée à chaque étape sauf à:
Common Name (e.g. server FQDN or YOUR name) []:
et tapez le nom de domaine du registre, à savoir somehost
Assurez-vous d'utiliser le nom myregistrydomain.com en tant que CN.
la connexion au registre réussit maintenant
Numéro 3
Réponse d'erreur du démon: Get https: // somehost: 8001/v1/users / : x509: certificat signé par une autorité inconnue
solution
Sudo mkdir -p /etc/docker/certs.d/somehost:8001/
Sudo cp certs/domain.crt /etc/docker/certs.d/somehost:8001/ca.crt
Définition du registre local non sécurisé dans docker avec proxy:
1) dans Ubuntu, ajoutez l’indicateur suivant --insecure-registry IP: port sous DOCKER_OPTS dans le fichier/etc/default/docker
1.1) configurez la variable d'environnement no_proxy de manière à contourner l'adresse IP locale/le nom d'hôte/le nom de domaine ... car le proxy peut envoyer un msg interactif ... comme continuer et ce msg intermédiaire confond le client docker et, enfin, le délai d'expiration ...
1.2) si nom de domaine est configuré ... alors n'oubliez pas de mettre à jour le fichier/etc/hosts si vous n'utilisez pas DNS.
1.3) dans/etc/default/docker définissez les variables env http_proxy et https_proxy ..., car elles permettent de télécharger des images depuis des hubs externes à la société. format http_proxy = http: // nom d'utilisateur: mot de passe @ proxy: port
2) redémarrez le service de menu fixe ... s'il est installé en tant que service, utilisez le redémarrage du service de base Sudo
3) redémarrez le conteneur de registre [Sudo docker run -p 5000: 5000 registry: 2]
4) marquez l’image désirée à l’aide de la balise de docker Sudo
5) Appuyez sur l'image ... Sudo docker Appuyez sur ip: port/imagename
6) Si vous voulez extraire l’image d’une autre machine, dites B sans TLS/SSL, appliquez les valeurs 1, 1.1 et 2 dans B. Si ces modifications ne sont pas effectuées sur la machine B, la lecture échouera.
buntu 16.04
Créer (n'existe pas) le fichier /etc/systemd/system/docker.service.d/registry.conf
avec le contenu:
[Service]
#You need the below or you 'ExecStart=' or you will get and error 'Service has more than one ExecStart= setting, which is only allowed'
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.20.30.40:5000
ensuite
Sudo systemctl stop docker
Sudo systemctl daemon-reload
Sudo systemctl start docker