Este tem uma solução simples. Primeiro, se você quiser se conectar à porta 8020 do seu contêiner hadoop, verifique se essa porta também está exposta. Em segundo lugar, esses contêineres possuem sua própria interface de loopback (localhost) e endereços IP. Eles estão conectados por meio do docker0 da rede da bridge à interface eth0 do host. Portanto, você precisa usar o endereço IP que o Docker injeta no contêiner do flume.
Então, eles iniciarão os contêineres corretamente:
docker run -it --name hadoop --expose 8080 --expose 8020 h_service
docker run -it --name flume --link hadoop:had00p -p 8081:8081 f_service
Mas você precisará dizer ao flume para se conectar ao hadoop em "had00p" em vez de "localhost". Eu usei o had00p aqui apenas para distinguir o alias que ele terá dentro do container do nome do container que você deu ao container rodando hadoop.
Aqui está um exemplo simples:
docker run -d --name container_a --expose 8080 busybox:latest nc -l 0.0.0.0 8080
docker run --rm --link container_a:dep_alias busybox:latest env
docker run --rm --link container_a:dep_alias busybox:latest cat /etc/hosts
Quando o Docker cria links de aplicativos, ele injeta várias variáveis de ambiente e adiciona um nome de host ao arquivo / etc / hosts do contêiner vinculado. Ele também adicionará regras de firewall para permitir a comunicação entre os dois contêineres se você tiver a comunicação entre contêineres desativada.