Como Configurar o Docker para Rodar Atrás de um Proxy

Em ambientes corporativos, é muito comum que os servidores não tenham acesso direto à internet. Todo o tráfego de rede precisa passar por um proxy. Se você tentar baixar uma imagem Docker (docker pull) nesse cenário sem as configurações corretas, o comando irá falhar ou ficar travado.

Neste tutorial, você vai aprender como configurar o Docker para rodar atrás de um proxy de forma definitiva, utilizando o systemd. Vamos utilizar exemplos práticos de configuração de variáveis de ambiente (HTTP_PROXY, HTTPS_PROXY e NO_PROXY).

Pré-requisitos

Antes de começar, você vai precisar de:

  • Um servidor Linux com o Docker instalado.
  • Acesso ao terminal com privilégios de sudo.
  • O endereço de IP e a porta do seu servidor proxy (no nosso exemplo, usaremos http://172.24.0.254:3128/).

Passo 1: Criar o diretório de configuração do Docker

Por padrão, o Docker não lê variáveis de proxy globais do sistema. Precisamos criar um diretório específico para sobrescrever as configurações do serviço do Docker.

Abra o seu terminal e execute o comando abaixo para criar a pasta docker.service.d:

sudo mkdir -p /etc/systemd/system/docker.service.d

Passo 2: Criar e editar o arquivo de configuração do Proxy

Agora, vamos criar o arquivo que conterá as instruções de proxy. Usaremos o editor de texto nano (você pode usar o vim se preferir).

sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

Dentro deste arquivo, cole o seguinte conteúdo (adapte os IPs e portas para a realidade da sua rede):

[Service]
Environment="HTTP_PROXY=http://172.24.0.254:3128/"
Environment="HTTPS_PROXY=http://172.24.0.254:3128/"
Environment="NO_PROXY=localhost,127.0.0.1,mysql-server,zabbix-server,192.168.24.0/24"

Entendendo as variáveis:

  • [Service]: Indica que estas configurações pertencem ao serviço do systemd.
  • HTTP_PROXY e HTTPS_PROXY: Definem o endereço do servidor proxy que o Docker usará para acessar a internet.
  • NO_PROXY: Lista de endereços (separados por vírgula) que não devem passar pelo proxy. Isso é crucial para comunicação interna. Inclui localhost, 127.0.0.1, nomes de containers/servidores internos (mysql-server, zabbix-server) e faixas de IP da rede local (ex: 192.168.24.0/24).

Salve o arquivo e saia do editor (No nano, pressione CTRL+X, depois Y e Enter).

Passo 3: Aplicar as configurações (Passo Crucial)

Muitos tutoriais esquecem deste passo. O Docker não reconhecerá as novas configurações apenas criando o arquivo. Você precisa recarregar o daemon do systemd e reiniciar o serviço do Docker.

Execute os dois comandos abaixo:

sudo systemctl daemon-reload
sudo systemctl restart docker

Passo 4: Verificar se o Proxy foi aplicado

Para garantir que o Docker absorveu as variáveis de ambiente, você pode rodar o seguinte comando:

sudo systemctl show --property=Environment docker

A saída deve mostrar exatamente as variáveis que você configurou no Passo 2.

Passo 5: Testando a conexão (Docker Pull)

Agora vem o teste final. Vamos tentar baixar uma imagem leve, como o alpine, para validar a configuração.

Execute o comando:

sudo docker pull alpine

Se tudo estiver configurado corretamente, você verá uma saída semelhante a esta, mostrando o download sendo feito com sucesso através do proxy:


Dicas Extras e Solução de Problemas (Troubleshooting)

  • Proxy com Autenticação: Se o seu proxy exigir usuário e senha, altere a URL para: http://usuario:senha@172.24.0.254:3128/.
  • Erro de conexão: Se o docker pull falhar, verifique se o IP do proxy está correto e se o servidor Docker tem permissão de firewall para acessar a porta do proxy (3128 no nosso exemplo).
  • Containers não acessam a internet: Lembre-se que essa configuração afeta o Docker Daemon (para baixar imagens). Para que os containers em execução usem o proxy, você precisa passar as variáveis de ambiente (-e HTTP_PROXY=...) no momento em que roda o docker run ou configurá-las no seu Dockerfile/docker-compose.yml.

Conclusão

Configurar o Docker para operar atrás de um proxy é uma tarefa essencial para ambientes corporativos restritos. Com a configuração via systemd mostrada neste guia, você garante que o serviço do Docker consiga baixar imagens da internet de forma transparente e segura, respeitando as regras de rede da sua empresa.