web-dev-qa-db-fra.com

Comment télécharger des images Docker sans utiliser la commande pull?

Est-il possible de télécharger une image/un conteneur Docker en utilisant, par exemple, Firefox et en n'utilisant pas le docker-pull intégré?.

Je suis bloqué par le pare-feu et le proxy de la société et je ne parviens pas à y faire passer un trou.

Mon problème est que je ne peux pas utiliser Docker pour obtenir des images, c’est-à-dire Docker enregistrer/extraire et d’autres fonctions fournies par Docker, car elles sont bloquées par un pare-feu.

17
Ephreal

Juste une alternative - C’est ce que j’ai fait dans mon organisation pour couchbase image où j’ai été bloqué par un proxy.

Sur mon ordinateur portable personnel (OS X)

~$ $ docker save couchbase > couchbase.tar
~$ ls -lh couchbase.docker
-rw-------  1 vikas  devops   556M 12 Dec 21:15 couchbase.tar
~$ xz -9 couchbase.tar
~$ ls -lh couchbase.tar.xz
-rw-r--r--  1 vikas  staff   123M 12 Dec 22:17 couchbase.tar.xz

Ensuite, j'ai téléchargé la balle tar compressée sur Dropbox et téléchargé sur ma machine de travail. Pour une raison quelconque, Dropbox était ouvert :)

Sur mon ordinateur de travail (CentOS 7)

$ docker load < couchbase.tar.xz

Références

15
vikas027

Je devais gérer moi-même ce problème: télécharger une image depuis une machine restreinte disposant d'un accès Internet, mais pas de client Docker pour une utilisation sur une autre machine restreinte avec le client Docker, mais pas d'accès Internet. J'ai posté ma question sur le site DevOps Stack Exchange }:

Avec l'aide de la communauté Docker, j'ai pu trouver une solution à mon problème. Ce qui suit est ma solution.


Il s’avère que le Moby Project possède un script Shell sur le compte compte Moby GitHub qui permet de télécharger des images de Docker Hub dans un format pouvant être importé Docker:

La syntaxe d'utilisation du script est la suivante:

download-frozen-image-v2.sh target_dir image[:tag][@digest] ...

L'image peut ensuite être importée avec tar et docker load:

tar -cC 'target_dir' . | docker load

Pour vérifier que le script fonctionne comme prévu, j'ai téléchargé une image Ubuntu à partir de Docker Hub et je l'ai chargée dans Docker:

user@Host:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest
user@Host:~$ tar -cC 'ubuntu' . | docker load
user@Host:~$ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#

En pratique, je devrais d’abord copier les données du client Internet (qui n'est pas installé dans Docker) sur la machine cible/de destination (sur lequel a installé Docker):

user@nodocker:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest
user@nodocker:~$ tar -C 'ubuntu' -cf 'ubuntu.tar' .
user@nodocker:~$ scp ubuntu.tar user@hasdocker:~

puis chargez et utilisez l'image sur l'hôte cible:

user@hasdocker:~ docker load ubuntu.tar
user@hasdocker:~ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#
9
igal

Tout d’abord, vérifiez si votre démon Docker est configuré pour utiliser le proxy. Avec boot2docker et docker-machine, par exemple, cela se fait sur docker-machine create , avec l’option --engine-env.

S'il s'agit simplement d'un problème de certificat (c'est-à-dire que Firefox accède à Docker Hub), essayez d'installer ce certificat :

openssl s_client -connect index.docker.io:443 -showcerts /dev/null | openssl x509 -outform PEM > docker.pem
Sudo cp docker.pem /etc/pki/ca-trust/source/anchors/
Sudo update-ca-trust
Sudo systemctl restart docker
Sudo docker run hello-world

L’autre solution de contournement (solution déconseillée) consisterait à accéder à Docker Hub sans s’appuyer sur un certificat avec --insecure-registry :

Si le pare-feu bloque activement toute extraction Docker, au point que vous ne pouvez même pas accéder à Docker Hub depuis Firefox, vous devrez alors docker savedocker load une archive d'images. Enregistrez-le à partir d'une machine sur laquelle vous avez accédé à Docker Hub (et où la traction du docker a réussi). Chargez-le sur votre ordinateur d'entreprise (après approbation de vos administrateurs de système informatique, bien sûr).

Remarque: vous ne pouvez pas facilement "simplement" télécharger une image, car celle-ci est souvent basée sur d'autres images à télécharger également. C'est ce que docker pull fait pour vous. Et c’est ce que fait aussi docker save (créer une archive composée de tout les images nécessaires).

Le OP Ephreal ajoute dans les commentaires :

[Je] n'ai pas fait fonctionner mon image de corp non plus . Mais j’ai trouvé que _/je pouvais télécharger le fichier Docker et recréer l’image moi-même à partir de rien . Cela revient essentiellement au téléchargement de l’image.

1
VonC

Une autre option pourrait être une option pour vous si le pare-feu (et la stratégie) de votre entreprise autorise la connexion à un serveur SSH distant. Dans ce cas, vous pouvez simplement configurer un tunnel SSH pour canaliser tout trafic vers le registre Docker.

0
Kaveh Hadjari

Ainsi, par définition, une commande client d'extraction Docker doit en réalité communiquer avec un démon Docker, car celui-ci assemble les couches une par une pour vous.

Considérez-le comme une requête POST - cela provoque une mutation d'état dans le démon Docker lui-même. Vous ne tirez rien sur HTTP lorsque vous effectuez un tirage.

Vous pouvez extraire toutes les couches individuelles situées sur le registre REST du registre Docker, mais ce ne sera pas la même sémantique qu'une extraction, car pull est une action qui indique spécifiquement au démon d'aller chercher toutes les couches pour une image qui vous tient à coeur.

0
jayunit100