J'exécute docker sur Debian Jessie, qui se trouve derrière un proxy d'entreprise. Pour pouvoir télécharger des images de menu fixe, je dois ajouter les éléments suivants à mon /etc/defaults/docker
http_proxy="http://localhost:3128/"
Je peux confirmer que cela fonctionne.
Cependant, pour pouvoir accéder à interwebz à partir de mon conteneur, je dois démarrer toutes les sessions avec --net Host
, puis configurer ces variables d'environnement:
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 de l'hôte et ne connaisse pas le proxy (c'est-à-dire que tous les appels sortants au port 20, 80, 443 du conteneur passent par le port du proxy de l'hôte). Est-ce possible?
Sinon, 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?
UPDATE: Je sais que je peux transmettre ces informations avec --env http_proxy=...
, etc., mais c'est maladroit. Je veux que cela fonctionne pour tous les utilisateurs du système sans avoir à utiliser des alias.
Le serveur hôte exécute un conteneur exécutant un proxy (squid, dans ce cas) pouvant effectuer un proxy transparent. Ce conteneur a des règles iptables qui NAT du trafic vers le serveur proxy - cela signifie que le conteneur doit être exécuté en mode privilégié.
Le serveur hôte contient également (et voici la magie) des entrées de table de routage ip qui redirigent tout le trafic depuis n'importe quel conteneur, à l'exception du proxy destiné au port 80, via le conteneur de proxy.
Ce dernier bit signifie essentiellement que pour le trafic du port 80, la route d'un conteneur au reste du monde passe par le conteneur de proxy, ce qui lui donne la chance de NAT et d'un proxy transparent.