Docker / Boot2Docker: définissez les proxies HTTP / HTTPS pour le docker sur OS X

En bref : Comment définir les proxies HTTP / HTTPS pour Docker sur Mac OS X?

En détail :

Je lance Docker (1.12) sur Mac OS X derrière un proxy. J’ai suivi les instructions d’installation et installé boot2docker. Cela fonctionne bien si je tire de mon registre Docker interne au réseau.

Cependant, j’obtiens l’erreur suivante en tirant de docker.io:

machine:~ me$ docker run ubuntu echo hello world Unable to find image 'ubuntu' locally Pulling repository ubuntu 2014/06/30 13:23:26 Get https://index.docker.io/v1/repositories/ubuntu/images: dial tcp: lookup index.docker.io: no such host 

Remarque 1 : DOCKER_HOST , http_proxy et https_proxy sont disponibles dans l’environnement (l’exécution de env affiche les trois).

Note 2 : J’ai lu dans d’autres articles que cette erreur se produit lorsque le démon ne fonctionne pas correctement. Cependant, la docker version ne montre aucun problème. De plus, je peux tirer et exécuter des images extraites de mon registre Docker interne au réseau.

Note 3 : J’ai pu configurer Docker sur Red Hat Linux (RHEL). J’ai dû append les informations de proxy à /etc/sysconfig/docker . J’ai lu qu’il existe un fichier similaire sur Ubuntu ( /etc/init/docker.conf ). Cependant, je n’ai pas pu trouver ce fichier pour Docker (ou boot2docker?) Sur Mac OS X.

Les fichiers de configuration que vous devez modifier ne seront pas sur votre système de fichiers OS X, ils seront attachés à la machine virtuelle Tiny Core Linux qui agit comme votre serveur Docker local.

Pour configurer le proxy pour cela, démarrez d’abord Boot2docker à partir d’applications. Une fois démarré, installez une fenêtre de terminal et ssh dans la machine virtuelle:

 bash-3.2$ boot2docker ssh Warning: Permanently added '[localhost]:2022' (RSA) to the list of known hosts. ## . ## ## ## == ## ## ## ## === /""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| boot2docker: 1.0.1 master : cad5ece - Fri Jun 20 02:03:40 UTC 2014 docker@boot2docker:~$ 

Maintenant, créez / modifiez / var / lib / boot2docker / profile pour définir les informations de proxy:

 docker@boot2docker:~$ sudo vi /var/lib/boot2docker/profile 

Tinycore a besoin des informations de proxy comme suit: protocole: // ip: port
Pour être sûr, je définis des proxys pour HTTP et HTTPS.

 export HTTP_PROXY=http://your.proxy.name:8080 export HTTPS_PROXY=http://your.proxy.name:8080 

Vous pouvez maintenant redémarrer le service docker VM et quitter la machine virtuelle.

 docker@boot2docker:~$ sudo /etc/init.d/docker restart docker@boot2docker:~$ exit Connection to localhost closed. 

Vous devriez pouvoir exécuter le client sur l'instance de machine virtuelle maintenant.

 bash-3.2$ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Official Ubuntu base image 356 stackbrew/ubuntu Official Ubuntu base image 39 crashsystems/gitlab-docker A trusted, regularly updated build of GitL... 

Cette modification est conservée via les redémarrages de la machine virtuelle. Vous devriez seulement le faire une fois.

Pour la petite histoire, VirtualBox a un paramètre de préférence globale pour les proxys, mais rien que j'essayais là ne fonctionnerait.

Depuis la version récente (août 2015) 1.8, la méthode recommandée par docker pour créer des hôtes Docker – y compris les machines virtuelles boot2docker – passe par son utilitaire docker-machine .

Et depuis la version 1.8, docker-machine prend désormais en charge la configuration des serveurs proxy au moment de la création de la machine virtuelle via une invocation comme celle-ci:

 docker-machine create -d virtualbox \ --engine-env HTTP_PROXY=http://192.37.246.181:2010 \ --engine-env HTTPS_PROXY=http://192.37.246.181:2010 \ --engine-env NO_PROXY=novartis.net \ default 

Cela se traduit par une machine virtuelle dont les variables d’environnement spécifiées ont déjà été ajoutées au fichier d’initialisation / var / lib / boot2docker / profile – il n’est plus nécessaire de les append manuellement.

J’ai résolu ce problème en définissant proxy config dans le fichier .profile:

 docker@boot2docker:~$ vi ~/.profile 

ajoutez votre proxy à la fin:

 # PS1='\u@\h:\w\$ ' PAGER='less -EM' MANPAGER='less -isR' EDITOR=vi export PS1 PAGER FILEMGR EDITOR MANPAGER export BACKUP=1 [ "`id -un`" = "`cat /etc/sysconfig/tcuser`" ] && echo "$BACKUP" | sudo tee /etc/sysconfig/backup >/dev/null 2>&1 export FLWM_TITLEBAR_COLOR="58:7D:AA" if [ -f "$HOME/.ashrc" ]; then export ENV="$HOME/.ashrc" . "$HOME/.ashrc" fi TERMTYPE=`/usr/bin/tty` [ ${TERMTYPE:5:3} == "tty" ] && ( [ ! -f /etc/sysconfig/Xserver ] || [ -f /etc/sysconfig/text ] || [ -e /tmp/.X11-unix/X0 ] || startx ) export HTTP_PROXY=http://proxy.XX.com:8080 export HTTPS_PROXY=http://proxy.XX.com:8080 

Enfin, redémarrez votre Boot2Docker.

Si vous utilisez Docker pour Mac et êtes derrière un environnement proxy.

Cliquez sur l’icône du menu fixe dans la barre de menu supérieure. (comme montré à l’étape 1.3 ici )

Accédez à Preferences > Advanced et définissez le proxy dans les options HTTP et HTTPS. Cliquez sur Appliquer et redémarrez en dessous. Tu es prêt. 🙂

Pour résoudre le problème avec curl dans la construction de docker, j’ai ajouté ce qui suit à l’intérieur du fichier Docker:

 ENV http_proxy=http://infoprx2:8080 ENV https_proxy=http://infoprx2:8080 RUN apt-get update && apt-get install -y curl vim 

Notez que l’instruction ENV est BEFORE l’instruction RUN.

et pour que le démon docker puisse accéder à Internet (j’utilise le kitematic avec boot2docker), j’ai ajouté ce qui suit dans / var / lib / boot2docker / profile:

 export HTTP_PROXY=http://infoprx2:8080 export HTTPS_PROXY=http://infoprx2:8080 

Le fichier de configuration dans boot2docker devrait être /var/lib/boot2docker/profile , éditez ce fichier sur un proxy http (s) personnalisé.