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

18

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/"

Eu 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 hoste configurar essas variáveis ​​env:

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

Idealmente, gostaria que o contêiner não precisasse da rede 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 proxy do host). Isso é possível?

Caso contrário, é possível ter uma configuração de site, o que garantirá que essas variáveis ​​env sejam definidas localmente, mas nunca exportadas como parte de uma imagem?

ATUALIZAÇÃO : Eu sei que posso passar essas coisas com --env http_proxy=...etc, mas isso é desajeitado. Quero que funcione para todos os usuários no sistema sem precisar usar aliases.

fommil
fonte

Respostas:

5

Veja esta resposta SO :

O servidor host executa um contêiner executando um proxy (squid, nesse caso) que pode executar proxies transparentes. Esse contêiner possui algumas regras de iptables que o tráfego NAT no servidor proxy - isso significa que o contêiner precisa ser executado no modo privilegiado.

O servidor host também contém (e aqui está a mágica) entradas da tabela de rotas IP que redirecionam todo o tráfego de qualquer contêiner, exceto o proxy destinado à porta 80, através do contêiner de proxy.

Esse último bit significa essencialmente que, para o tráfego da porta 80, a rota do contêiner para o resto do mundo passa pelo contêiner proxy - dando a chance de NAT e proxy transparente.

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

Laktak
fonte
Isso não funcionará para "https".
ceving 11/12