Como posso permitir que todos os meus contêineres docker usem meu proxy?

17

Estou executando o docker no Debian Jessie, que está por trás de um proxy corporativo. Para poder baixar imagens do docker, preciso adicionar o seguinte ao meu /etc/defaults/docker

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

Posso confirmar que isso funciona.

No entanto, para poder acessar a interwebz de dentro do meu contêiner, preciso iniciar todas as sessões com --net host e, em seguida, configurar essas variáveis env:

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

Idealmente, eu gostaria que o contêiner não precisasse da rede do host e não soubesse sobre o proxy (ou seja, todas as chamadas de saída para as portas 20, 80, 443 no contêiner passam pela porta do proxy do host). Isso é possível?

Se isso falhar, é possível ter uma configuração do site, o que garantirá que essas variáveis env sejam definidas localmente, mas nunca exportadas como parte de uma imagem?

UPDATE : Eu sei que posso passar essas coisas com --env http_proxy=... etc, mas isso é desajeitado. Eu quero que funcione para todos os usuários no sistema sem ter que usar aliases.

    
por fommil 16.03.2015 / 14:16

1 resposta

5

Veja isto SO answer :

Host server runs a container running a proxy (squid, in this case) that can do transparent proxying. That container has some iptables rules that NAT traffic into the proxy server - this means that container needs to run in privileged mode.

Host server also contains (and here's the magic) ip route table entries that re-route all traffic from any container but the proxy that was destined for port 80, through the proxy container.

That last bit essentially means that for port 80 traffic, the route from container to the rest of the world goes through the proxy container - giving it the chance to NAT and transparent proxy.

link

    
por 04.08.2015 / 22:54

Tags