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 A
por 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.