Esse foi um erro estúpido. Tudo funcionou bem com o docker.
O problema foi com o aplicativo Flask, que está escutando apenas o host local por padrão. Para fazê-lo ouvir a rede, você precisa definir
app.run(host= '0.0.0.0')
Então, aqui está como tudo funciona:
- O Boot2docker instala a máquina virtual no seu Mac. Você poderia ssh para ele com
boot2docker ssh
. - Essa máquina virtual é como um gateway para a execução de contêineres. Cada contêiner é um pc virtual por trás desse gateway. Se você ssh'ed para o vm, você poderia pingar contêineres. Para descobrir o ip do container você deve anexar a ele
docker exec -it bash
Agora você está dentro do contêiner. Você pode executar ifconfig
ou ip addr show
para ver o ip do seu container.
- Depois de ter o ip do container, você pode fazer o ping da vm. E tente se conectar à porta exposta. (se você ver
0.0.0.0:49155->5000/tcp
emdocker ps
a 5000)
curl container_ip:container_port
Para mim, ele se recusou a se conectar, no entanto eu poderia conectar-se do próprio container via curl localhost:5000
É assim que eu descobri.