Estoy tratando de agregar un reenvío de puerto al contenedor docker usando docker-proxy pero tengo este error a continuación,
Aquí están los detalles,
Ya se está ejecutando un contenedor con IP 172.17.0.2 con --net=none. Proporcionamos nuestra propia red y no usamos la red docker0.
Ahora queremos exponer algunos puertos del contenedor al host, así que pensé en probar docker-proxy.
ejecutamos el siguiente comando,
$ docker-proxy -container-ip 172.17.0.2 -container-port 8000 -host-ip 0.0.0.0 -host-port 8000 -proto tcp and we are getting, 2017/03/16 10:02:30 Stopping proxy on tcp/[::]:8001 for tcp/172.17.0.2:8001 (accept tcp [::]:8001: accept4: bad file descriptor)Versión de Docker: Docker versión 17.03.0-ce, compilación 60ccb22
No creo que haya otra forma de hacer esto, excepto detener el contenedor, eliminarlo y luego ejecutarlo nuevamente a partir de un Dockerfile o simplemente con la ejecución de la ventana acoplable agregando -p 8000: 8000. Docker no parece permitirle jugar con docker-proxy directamente, debe usar los comandos estándar.
También puede exponer manualmente el puerto al acceso externo cambiando directamente las iptables, es decir, la cadena DOCKER en la tabla NAT y la cadena DOCKER en el filtro. Por ejemplo:
iptables -t nat -A DOCKER ! -i your_bridge0 -p tcp -m tcp --dport 8000 -j DNAT --to-destination 172.17.0.2:8000Y:
iptables -A DOCKER ! -i your_bridge0 -o your_bridge0 -d 172.17.0.2 -p tcp --m tcp --dport 80 -j ACCEPTPor supuesto, entonces tendrías que asegurarte de que las reglas se mantendrán, lo cual es un problema completamente diferente. A Docker no parece importarle mucho quién administra iptables (ufw, firewalld, etc.).
Esto funcionará, incluso si el proxy docker no se está ejecutando en absoluto. docker-proxy se une a los puertos del host, lo que significa que usted controla el tráfico en la cadena INPUT en la tabla de filtros (es decir, el propio host). Todavía no he descubierto por qué Docker se creó de esta manera, pero de forma predeterminada, si expone un contenedor (usando -p) y luego elimina la regla DNAT, seguirá funcionando, porque la solicitud llegará a INPUT cadena directamente. Lo cual es alucinante, pero no importa.