He estado siguiendo los tutoriales y experimentando con Docker durante un par de días, pero no puedo encontrar ningún ejemplo de uso del "mundo real".
¿Cómo puedo comunicarme con mi contenedor desde el exterior?
Todos los ejemplos que puedo encontrar terminan con 1 o más contenedores, pueden compartir puertos con los demás, pero nadie fuera del host tiene acceso a sus puertos expuestos.
¿No es el objetivo de tener contenedores como este, que al menos 1 de ellos debe ser accesible desde el exterior?
Encontré una herramienta llamada pipework ( https://github.com/jpetazzo/pipework ) que probablemente me ayudará con esto. Pero, ¿es esta la herramienta que están usando todos los que prueban Docker para la producción?
¿Es necesario un "truco" para que el exterior hable con mi contenedor?
Puede usar el argumento -p para exponer un puerto de su contenedor a la máquina host.
Por ejemplo:
sudo docker run -p80:8080 ubuntu bashVinculará el puerto 8080 de su contenedor al puerto 80 de la máquina host.
Por lo tanto, puede acceder a su contenedor desde el exterior utilizando la URL del host:
http://you.domain -> losthost:80 -> container:8080¿Es eso lo que querías hacer? O tal vez me perdí algo
(El parámetro -expose solo expone el puerto a otros contenedores (no al host))
Esta publicación de blog ( https://blog.codecentric.de/en/2014/01/docker-networking-made-simple-3-ways-connect-lxc-containers/ ) explica el problema y la solución.
Básicamente, parece que las tuberías ( https://github.com/jpetazzo/pipework ) son la forma de exponer los puertos de contenedores al exterior a partir de ahora... Espero que esto se integre pronto...
Actualización: en este caso, iptables tenía la culpa y había una regla que bloqueaba el tráfico reenviado. Agregar -A FORWARD -i em1 -o docker0 -j ACCEPT lo resolvió ...