Um proxy HTTP externo não precisa conhecer o nome do serviço api do Docker. Para http://api:8080/, o proxy abre a conexão seguinte, portanto uma resolução bem-sucedida dentro do contêiner do app não prova a visão de DNS do proxy.

Para o acesso direto pretendido, adicione a exceção ao ambiente desse contêiner:

environment:
  http_proxy: http://proxy.example:8080
  https_proxy: http://proxy.example:8080
  no_proxy: api

As solicitações diretas para api usam a rota do contêiner e o resolvedor incorporado. Os dois contêineres ainda precisam da rede compartilhada definida pelo usuário e o serviço deve escutar na porta 8080. As solicitações externas elegíveis mantêm o proxy. Se esses destinos públicos puderem usar um intermediário público, a lista de proxies HTTP fornece candidatos para as URLs de proxy sem conta; mantenha api entre as exceções diretas.

Se contêineres recriados mantiverem variáveis inesperadas, inspecione a seção config.json proxies do cliente Docker, que pode injetar valores de ambiente. Altere a entrada pretendida e recrie os contêineres afetados pelo fluxo normal, preservando a configuração não relacionada.

Artigos relacionados