2 votes

Comment accéder à un registre non sécurisé de docker à partir d'un docker Windows sur une machine Windows 10 ?

J'ai deux machines qui utilisent Dockerd. L'une est une boîte Ubunto.18.04 avec la version 18.06.1-ce de docker installée, que je veux utiliser comme un serveur de registre/dépôt de test non sécurisé où la seule façon de l'utiliser est d'utiliser un tunnel SSH sur le port 5000.

L'autre est une station de travail de développement, une boîte Windows 10 "pro" qui a également une instance locale de docker (docker pour Windows version 18.06.1-ce) fonctionnant comme un service sur elle que j'utilise pour construire des images de test.

Jusqu'à présent, je n'arrive pas à faire en sorte que la boîte Windows pousse ou tire de la boîte Ubuntu à travers le tunnel.

Les deux dockers fonctionnent. J'ai ajouté le paramètre de registres non sécurisés sur la station de travail (via l'interface graphique de docker, je n'ai pas pu trouver le paramètre de registres non sécurisés). daemon.json donc supposez qu'il se trouve dans le registre de Windows ou dans un emplacement caché).

J'ai ajouté localhost:5000 pour tester l'utilisation du tunnel SSHE et Dev2:5000 (temporaire pour ce test a ouvert le port 5000 sur le sous-réseau interne) pour tester une connexion directe sans le tunnel, et a redémarré docker.

Sur la boîte de registre, j'ai suivi l'exemple de la façon d'utiliser un registre privé et j'ai fait ce qui suit pour le tester. J'étais connecté à "Dev2" en tant qu'utilisateur que j'ai ajouté au groupe "docker" qui a aussi le droit d'utiliser le registre privé. sudo des privilèges. J'ai aussi essayé en tant que Root.

Dev2:> docker pull ubuntu:18.04
# success

Dev2:> docker tag ubuntu:18.04 localhost:5000/testapp:00.01
Dev2:> docker push localhost:5000/testapp/00.01
# success

Dev2:> docker tag ubuntu:18.04 Dev2:5000/testapp:00.02
Dev2:> docker push Dev2:5000/testapp/00.02
# success

Dev2:> docker image rm ubuntu:18.04
# success

Dev2:> docker image ls -a

REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
localhost:5000/testapp   00.01               ea4c82dcd15a        40 hours ago        85.8MB
Dev2:5000/testapp        00.02               ea4c82dcd15a        40 hours ago        85.8MB
registry                 2                   2e2f252f3c88        5 weeks ago         33.3MB

Dev2:> curl http://localhost:5000/v2/_catalog
{"repositories":["testapp"]}

Dev2:>  curl http://localhost:5000/v2/testapp/tags/list
{"name":"testapp","tags":["00.01","00.02"]}

Dev2:> curl http://Dev2:5000/v2/_catalog
{"repositories":["testapp"]}

Dev2:> curl http://Dev2:5000/v2/testapp/tags/list
{"name":"testapp","tags":["00.01","00.02"]}

À ce stade, tout semble aller bien. Si je supprime les images sur le docker Dev2 et que je les retire, elles sont extraites du référentiel et ajoutées à nouveau à l'instance du docker.

Maintenant j'essaie de tirer les images dans docker sur la station de travail.

J'exécute un tunnel ssh sur le poste de travail Windows 10 ( Msys version GNU)

workstation:> ssh nyc.livingwork.com -L 5000:localhost:5000 &  # this runs and the tunnel workstation

J'essaie également d'utiliser un navigateur (pas de curl ici) avec des URL :

http://Dev2:5000/v2/testapp/tags/list et http://localhost:5000/v2/testapp/tags/list

Et je reçois pour les deux : {"name":"testapp","tags":["00.01","00.02"]}

Le serveur est donc accessible à la fois directement et à travers un tunnel.

Maintenant, j'essaie :

workstation:$ docker pull localhost:5000/testapp:00.01
Error response from daemon: Get http://localhost:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

workstation:> docker pull Dev2:5000/testapp:00.02
Error response from daemon: Get http://Dev2:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Le délai d'attente est d'au moins 30 secondes. Note : si je fais la même chose à partir d'une autre boîte Unix exécutant docker tout fonctionne correctement donc c'est particulier à docker pour Windows fonctionnant sur Windows 10. Pour une raison quelconque, cela échoue.

Je n'ai pas réussi à résoudre ce problème. Il n'y a pas de proxy HTTP dans la chaîne sur les deux machines. Il se trouve sur un sous-réseau local. Tous les autres services du serveur sont accessibles, etc. Le paramètre "insecure-registries" dans le docker Windows de l'interface utilisateur est défini pour les hôtes et les ports.

C'est un bug ? Dans le Docker de Windows 10 ? Cela fonctionne bien depuis une autre boîte Ubuntu.

1voto

bogdan.mustiata Points 494

Au cas où quelqu'un rencontrerait encore ce problème. J'ai rencontré le même problème. J'ai pu le "réparer" en allant dans la section daemon.json et de désactiver les fonctions expérimentales. Voici ma configuration json :

{
  "insecure-registries": [
    "localhost:5000"
  ],
  "debug": true,
  "experimental": false,
  "registry-mirrors": []
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X