Saltar al contenido

¿Cómo puedo reenviar un puerto de un contenedor docker a otro?

Por fin luego de mucho batallar ya hallamos el resultado de este contratiempo que algunos usuarios de este sitio han tenido. Si quieres compartir algún dato puedes compartir tu comentario.

Solución:

Instalar en pc socat en su contenedor y en la ejecución de inicio

socat TCP-LISTEN:3306,fork TCP:B-IP:3306 &

Esto escuchará localmente en su 3306 y pasará cualquier tráfico bidireccionalmente a B-IP:3306. socat está disponible en un paquete llamado socat. Así que ejecutará cualquiera de los siguientes comandos para instalarlo

$ yum install -y socat
$ apt install -y socat
$ apk add socat

Editar-1

Incluso puede hacer esto al no tocar su contenedor original

Dockerfile

FROM alpine
RUN apk update && apk add socat

Cree el archivo como se muestra a continuación

docker build -t socat .

Ahora ejecute un contenedor desde el mismo

docker run --name mysql-bridge-a-to-b --net=container: socat socat TCP-LISTEN:3306,fork TCP:BIP:3306

Esto ejecutará este contenedor en la red de A. Entonces, cuando escucha en la red de A, el localhost:3306 estará disponible en A aunque no se haya tocado el contenedor A.

Simplemente puede ejecutar el contenedor con el modo de red igual al host.

docker run --network=host ...

En ese caso, desde el punto de vista del contenedor, localhost o 127.0.0.1 se referirán a la máquina host. Por lo tanto, si su base de datos se ejecuta en otro contenedor B que escucha en 3306, una dirección de localhost: 3306 en el contenedor A llegará a la base de datos en el contenedor B.

Si desea que el puerto del contenedor B se exponga como un puerto localhost en el contenedor A, puede iniciar el contenedor B con el network opción establecida en container mode para iniciar el contenedor B en el espacio de nombres de red del contenedor A.

Ejemplo:

docker run --net=container:A postgres

Donde:

  • A es el nombre o identificador del contenedor en el que desea mapear.

Esto iniciará postgres en un contenedor en el mismo espacio de nombres de red que Apor lo que cualquier puerto abierto en el contenedor de postgres se abrirá en la misma interfaz que A y debería estar disponible en localhost dentro del recipiente A.

Aquí tienes las reseñas y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *