GNU/Linux >> Tutoriales Linux >  >> Linux

Reenviar el puerto del host al contenedor docker

Como se indica en uno de los comentarios, esto funciona para Mac (probablemente también para Windows/Linux):

QUIERO CONECTAR DESDE UN CONTENEDOR A UN SERVICIO EN EL HOST

El host tiene una dirección IP cambiante (o ninguna si no tiene acceso a la red). Le recomendamos que se conecte al nombre DNS especial host.docker.internal que se resuelve en la dirección IP interna utilizada por el host. Esto es para fines de desarrollo y no funcionará en un entorno de producción fuera de Docker Desktop para Mac.

También puede comunicarse con la puerta de enlace usando gateway.docker.internal .

Citado de https://docs.docker.com/docker-for-mac/networking/

Esto funcionó para mí sin usar --net=host .


Una forma simple pero relativamente insegura sería usar el --net=host opción a docker run .

Esta opción hace que el contenedor utilice la pila de red del host. Luego puede conectarse a los servicios que se ejecutan en el host simplemente usando "localhost" como nombre de host.

Esto es más fácil de configurar porque no tendrá que configurar el servicio para aceptar conexiones desde la dirección IP de su contenedor docker, y no tendrá que decirle al contenedor docker una dirección IP específica o un nombre de host para conectarse, simplemente un puerto.

Por ejemplo, puede probarlo ejecutando el siguiente comando, que asume que su imagen se llama my_image , tu imagen incluye el telnet y el servicio al que desea conectarse está en el puerto 25:

docker run --rm -i -t --net=host my_image telnet localhost 25

Si considera hacerlo de esta manera, consulte la precaución sobre seguridad en esta página:

https://docs.docker.com/articles/networking/

Dice:

--net=host:le dice a Docker que omita colocar el contenedor dentro de una pila de red separada. En esencia, esta opción le dice a Docker que no contenga la red del contenedor. Si bien los procesos de contenedor seguirán estando confinados a su propio sistema de archivos y lista de procesos y límites de recursos, un comando rápido de ip addr le mostrará que, en cuanto a la red, viven "fuera" en el host principal de Docker y tienen acceso completo a sus interfaces de red. . Tenga en cuenta que esto no permite que el contenedor vuelva a configurar la pila de la red del host, lo que requeriría --privileged=true, pero permite que los procesos del contenedor abran puertos con números bajos como cualquier otro proceso raíz. También permite que el contenedor acceda a servicios de red local como D-bus. Esto puede llevar a que los procesos en el contenedor puedan hacer cosas inesperadas como reiniciar su computadora. Debe usar esta opción con precaución.


Su host docker expone un adaptador a todos los contenedores. Suponiendo que está en ubuntu reciente, puede ejecutar

ip addr

Esto le dará una lista de adaptadores de red, uno de los cuales se parecerá a

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
   valid_lft forever preferred_lft forever

Deberá decirle a rabbit/mongo que se vincule a esa IP (172.17.42.1). Después de eso, debería poder abrir conexiones a 172.17.42.1 desde sus contenedores.


Linux
  1. Cómo acceder al espacio de nombres de red del contenedor Docker desde el host

  2. Iniciar servicios automáticamente en Docker Container

  3. ¿Qué hay dentro de una imagen/contenedor de Docker?

  4. Ejecutando docker en Ubuntu:el volumen de host montado no se puede escribir desde el contenedor

  5. ¿Cuál es el PID en el host de un proceso que se ejecuta dentro de un contenedor Docker?

Cómo conectarse a Localhost dentro de un contenedor Docker

Cómo obtener la dirección IP de un contenedor Docker desde el host

Cómo copiar archivos entre el host y el contenedor Docker

Cómo usar SSH en un contenedor Docker

Cómo gestionar contenedores Docker

Hacer un montaje NFS en el host visible y de lectura y escritura dentro del contenedor Docker