Comment puis-je laisser tous mes conteneurs Docker utiliser mon proxy?

18

J'utilise docker sur Debian Jessie qui se trouve derrière un proxy d'entreprise. Pour pouvoir télécharger des images de docker, je dois ajouter ce qui suit à mon/etc/defaults/docker

http_proxy="http://localhost:3128/"

Je peux confirmer que cela fonctionne.

Cependant, afin de pouvoir accéder à l'interwebz depuis mon conteneur, je dois démarrer toutes les sessions avec --net hostpuis configurer ces variables env:

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}

Idéalement, j'aimerais que le conteneur n'ait pas besoin du réseau hôte et qu'il ne connaisse pas le proxy (c'est-à-dire que tous les appels sortants vers les ports 20, 80, 443 du conteneur passent par le port proxy de l'hôte). Est-ce possible?

À défaut, est-il possible d'avoir une configuration de site, qui garantira que ces variables env sont définies localement mais jamais exportées dans le cadre d'une image?

MISE À JOUR : Je sais que je peux passer ces choses avec --env http_proxy=...etc, mais c'est maladroit. Je veux que cela fonctionne pour tous les utilisateurs du système sans avoir à utiliser d'alias.

fommil
la source

Réponses:

5

Voir cette réponse SO :

Le serveur hôte exécute un conteneur exécutant un proxy (squid, dans ce cas) qui peut effectuer un proxy transparent. Ce conteneur a des règles iptables qui font du trafic NAT vers le serveur proxy - cela signifie que le conteneur doit s'exécuter en mode privilégié.

Le serveur hôte contient également (et voici la magie) des entrées de table de routage ip qui réacheminent tout le trafic à partir de n'importe quel conteneur, sauf le proxy qui était destiné au port 80, via le conteneur proxy.

Ce dernier bit signifie essentiellement que pour le trafic du port 80, la route du conteneur au reste du monde passe par le conteneur proxy - ce qui lui donne la possibilité de NAT et proxy transparent.

https://github.com/silarsis/docker-proxy

laktak
la source
Cela ne fonctionnera pas pour "https".
ceving