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 o interwebz de dentro do meu contêiner, preciso iniciar todas as sessões --net host
e configurar estas variáveis de ambiente:
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 proxy do host). Isso é possível?
Caso contrário, é possível ter uma configuração de site que garanta que essas variáveis env sejam definidas localmente, mas nunca exportadas como parte de uma imagem?
ATUALIZAR: Eu sei que posso passar essas coisas com --env http_proxy=...
etc, mas isso é desajeitado. Quero que funcione para todos os usuários do sistema sem precisar usar aliases.
Responder1
O servidor host executa um contêiner executando um proxy (squid, neste caso) que pode fazer proxy transparente. Esse contêiner possui algumas regras de iptables que trafegam NAT no servidor proxy - isso significa que o contêiner precisa ser executado em 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.
Essa última parte 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 ele a chance de NAT e proxy transparente.
Responder2
OConfigurar o cliente Dockera documentação oficial mostra como resolver esse problema facilmente.
Edite o arquivo ~/.docker/config.json
(ou %USERPROFILE%\.docker\config.json
) e adicione o seguinte snippet JSON:
{
"proxies": {
"default": {
"httpProxy": "http://localhost:3128",
"httpsProxy": "https://localhost:3128"
}
}
}
Isso resolveu meu problema em que a execução apt udpate
dentro de um contêiner docker debian falharia. Depois de adicionar as configurações de proxy naquele arquivo json e iniciar um novo contêiner docker apt update
começou a funcionar.