[Docker] : Comment prendre en compte un proxy pour puller/pusher et comment le passer dans un conteneur ?

Print Friendly, PDF & Email

 

Docker, c’est un sujet que j’ai l’occasion de creuser un peu en ce moment. Les pros de docker comme les devops savent faire cela les doigts dans le nez mais pour les débutants c’est un petit moment de recherche.

Lorsque l’on parle de docker et de proxy, deux questions reviennent souvent :

  • Comment prendre en compte un proxy sur la machine host pour puller/pusher des images ?
  • Comment faire pour que mon conteneur utilise un proxy ?

1. Utilisation d’un proxy sur la machine host de docker

Pour prendre en compte un proxy et éviter d’y revenir, il est nécessaire d’éditer la configuration de docker. Ainsi, comme si vous paramétiez votre proxy pour une utilisation par apt, vous allez vous rendre dans /etc/systemd/system/docker.service.d/ et créer un fichier de conf.

Par exemple, nous allons créer un fichier intitulé https-proxy.conf. Et nous allons ajouter dedans l’adresse de notre proxy en variable d’environnement (pour le service docker donc) :

[Service]
Environment="HTTPS_PROXY=http://monproxy:sonport"

Une fois ceci réalisé, le premier réflexe est de redémarrer le service docker… C’est pas faux mais dans notre cas on vient de modifier la conf de docker au niveau de systemd. donc il faut tout d’abord redémarrer le démond :

systemctl daemon-reload
service docker restart

Et voilà pour la première partie, vous pouvez utiliser votre proxy avec docker pour faire des pull et des push vers votre repository (dockerhub ou autre). Mais attention si vous être sur votre laptop, il se peut que vous ayez besoin de switcher (avec ou sans proxy), je vous invite donc à faire les fonctions qui vont bien ou alias pour vous faciliter la vie. L’idée c’est d’utiliser :

echo "Environment=\"HTTP_PROXY=http://monproxy:monport\"" | 
sudo tee --append /etc/systemd/system/docker.service.d/http-proxy.conf

2. Passer la conf de votre proxy dans un conteneur

C’est indispensable si vous êtes derrière un proxy sinon pas d’update ou d’installation possible sur le conteneur.

Découvrez  Docker - changer les ip par défaut

Et là docker est tout simplement génial car il permet de passer des variables d’environnement dans le conteneur à son lancement (son run). Remarque : si cela est plus durable vous pouvez faire cela directement dans votre Dockerfile.

Comment passer votre variable de proxy ? comme ceci :

docker run -tid -e http_proxy="http://monproxymonport" 
--name nom_conteneur nom_image

Et le tour est joué. Vous pouvez aussi passer un serveur dns avec –dns=”monipdns”.

Si vous voulez que votre image contienne toujours cette variable, vous devez la builder avec cette variable. Là encore c’est pas compliqué à ajouter dans le dockerfile :

ENV http_proxy="http://monproxymonport"

Vous pouvez consulter ce bon article sur les variables docker.