Eu tenho um contêiner docker que está executando um aplicativo node.js. No sistema em que o contêiner está sendo executado, posso fazer coisas como ...
curl http://<IP address of my docker container>/users ....
... e eles a resposta json esperada. Agora que instalei um servidor web apache em meu sistema, tenho alguns angular.js onde estou tentando me comunicar com a API REST no contêiner docker. Mas o contêiner docker, é claro, não pode ser acessado pelo restante dos hosts da minha rede. Existe uma maneira fácil de configurar algum tipo de proxy? Estou meio familiarizado com o HAProxy. Eu poderia configurar o HAProxy de alguma forma?
ATUALIZAR:
Eu inicio meu container docker assim:
[red@vm-red ~]$ sudo docker run -p 3000:8080 -t -i redsimage
...
Na linha de comando no host vm-red, posso executar este curl ...
[red@vm-red ~]$ curl -H "Content-Type: application/json" http://172.17.0.6:3000/user
... e obter os resultados esperados. Mas se eu usar algo como 'postman' do meu laptop ou meus navegadores no meu laptop e apontá-los para http://vm-red:8080/user
, não recebo nada. O que estou fazendo errado?
Você pode mapear facilmente uma porta em seu contêiner docker para a porta das máquinas host. Por exemplo, digamos que o IP da sua máquina host seja
10.20.30.40
, você pode disponibilizar sua API na máquina docker nesse ip mapeando a porta da API para a porta80
da máquina host. Agora, se você já tiver algo hospedado na máquina host, poderá mapeá-lo para alguma outra porta, digamos8080
.Ao mapear a porta de imagens do docker para a porta
80
no host, sua API estará acessível em10.20.30.40/user
, mas se você mapeá-la para uma porta diferente como8080
, sua API estará acessível em10.20.30.40:8080/users
Isso pode ser feito usando o comando simples abaixo:
você pode ler mais sobre isso aqui .