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

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

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 hoste 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

Veja esta resposta SO:

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.

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

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 udpatedentro 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 updatecomeçou a funcionar.

informação relacionada