Estoy tratando de ejecutar un contenedor Docker como un enrutador entre una --internal
red privada ( ) Docker y la host
red predefinida . Esto significa que el contenedor debe tener dos interfaces de red: una interfaz "externa", que puede acceder a todas las direcciones IP del host, y una interfaz "interna", que actúa como una puerta de enlace para los contenedores en la red interna de Docker
El contenedor del enrutador en sí enviará tráfico de red NAT desde / hacia los contenedores.
No he encontrado una manera de configurar Docker para ejecutar el contenedor con esas dos interfaces. Lo más cercano que podría obtener es tener dos bridge
interfaces asignadas, que no es exactamente lo que necesito.
Intentar conectarse manualmente da como resultado un error:
# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network
¿Alguien puede mostrarme cómo lograr esto, preferiblemente incluso con Docker Compose?
fuente
Respuestas:
De acuerdo con estas preguntas y respuestas sobre github :
fuente
network_mode
no funciona si necesita algo conectado a una red interna y la red host. Parece una locura que no podamos encontrar una buena solución clara para este problema.Docker no permite conectar un contenedor a la red host y a cualquier otra red de puente Docker al mismo tiempo. Trataré de ilustrar la razón con un ejemplo:
Con la configuración anterior, supongo que la red del host es visible desde C2, y supongo que esta es la razón por la cual Docker automáticamente nos impide exponer involuntariamente la red del host a contenedores no especificados por el host.
Dicho esto, si tenemos un conjunto de contenedores, y queremos que todos estén interconectados, con solo un contenedor que tenga acceso a la red host, mi enfoque sería:
EDITAR: aún tendríamos que adaptar las políticas de iptables de tal manera que se pueda llegar a C1 desde el resto de contenedores (consulte https://docs.docker.com/network/iptables/ )
fuente