Así que tengo un Nginx ejecutándose dentro de un contenedor docker, tengo un mysql ejecutándose en localhost, quiero conectarme a MySql desde mi Nginx. MySql se ejecuta en localhost y no expone un puerto al mundo exterior, por lo que está vinculado a localhost, no a la dirección IP de la máquina.
¿Hay alguna forma de conectarse a este MySql o cualquier otro programa en localhost desde este contenedor acoplable?
Esta pregunta es diferente de "Cómo obtener la dirección IP del host acoplable desde el interior de un contenedor acoplable" debido al hecho de que la dirección IP del host acoplador podría ser la IP pública o la privada en la red que puede o no no se puede acceder desde el contenedor de Docker (me refiero a IP pública si está alojado en AWS o algo así). Incluso si tiene la dirección IP del host docker, no significa que pueda conectarse al host docker desde el contenedor dado que la dirección IP puede estar superpuesta, host, bridge, macvlan, ninguno, etc., lo que restringe la accesibilidad de esa dirección IP
network: host
ti no puedes volver de un contenedor al host. Solo host al contenedor. Esta es la ideología principal detrás de los contenedores. Están aislados por razones de estabilidad y seguridad.Respuestas:
Editar: Si está utilizando Docker-for-mac o Docker-for-Windows 18.03+, simplemente conéctese a su servicio mysql utilizando el host
host.docker.internal
(en lugar de127.0.0.1
en la cadena de conexión).A partir de Docker 18.09.3, esto no funciona en Docker-for-Linux. Se presentó una solución el 8 de marzo de 2019 y, con suerte, se fusionará con la base del código. Hasta entonces, una solución alternativa es usar un contenedor como se describe en la respuesta de qoomon .
2020-01: se han realizado algunos progresos . Si todo va bien, esto debería aterrizar en Docker 20.04
TLDR
Úselo
--network="host"
en sudocker run
comando, luego127.0.0.1
en su contenedor docker apuntará a su host docker.Nota: Este modo solo funciona en Docker para Linux, según la documentación .
Nota sobre los modos de red del contenedor Docker
Docker ofrece diferentes modos de red cuando se ejecutan contenedores. Dependiendo del modo que elija, se conectaría a su base de datos MySQL que se ejecuta en el host docker de manera diferente.
docker run --network = "bridge" (predeterminado)
Docker crea un puente nombrado
docker0
por defecto. Tanto el host del acoplador como los contenedores del acoplador tienen una dirección IP en ese puente.en el host Docker, escriba
sudo ip addr show docker0
tendrá una salida similar a:Así que aquí mi host docker tiene la dirección IP
172.17.42.1
en ladocker0
interfaz de red.Ahora inicie un nuevo contenedor y obtenga un shell en él:
docker run --rm -it ubuntu:trusty bash
y dentro del tipo de contenedorip addr show eth0
para descubrir cómo está configurada su interfaz de red principal:Aquí mi contenedor tiene la dirección IP
172.17.1.192
. Ahora mira la tabla de enrutamiento:Por lo tanto, la dirección IP del host docker
172.17.42.1
se establece como la ruta predeterminada y se puede acceder desde su contenedor.docker run --network = "host"
Alternativamente, puede ejecutar un contenedor acoplable con la configuración de red establecida en
host
. Dicho contenedor compartirá la pila de red con el host del acoplador y, desde el punto de vista del contenedor,localhost
(o127.0.0.1
) se referirá al host del acoplador.Tenga en cuenta que cualquier puerto abierto en su contenedor Docker se abriría en el host Docker. Y esto sin requerir la opción
-p
u-P
docker run
.Configuración de IP en mi host docker:
y desde un contenedor acoplable en modo host :
Como puede ver, tanto el host Docker como el contenedor Docker comparten exactamente la misma interfaz de red y, como tales, tienen la misma dirección IP.
Conectarse a MySQL desde contenedores
Modo Puente
Para acceder a MySQL que se ejecuta en el host acoplable desde contenedores en modo puente , debe asegurarse de que el servicio MySQL esté escuchando las conexiones en la
172.17.42.1
dirección IP.Para hacerlo, asegúrese de tener uno
bind-address = 172.17.42.1
obind-address = 0.0.0.0
su archivo de configuración MySQL (my.cnf).Si necesita establecer una variable de entorno con la dirección IP de la puerta de enlace, puede ejecutar el siguiente código en un contenedor:
luego, en su aplicación, use la
DOCKER_HOST_IP
variable de entorno para abrir la conexión a MySQL.Nota: si usa
bind-address = 0.0.0.0
su servidor MySQL, escuchará las conexiones en todas las interfaces de red. Eso significa que se puede acceder a su servidor MySQL desde Internet; asegúrese de configurar las reglas del firewall en consecuencia.Nota 2: si usa
bind-address = 172.17.42.1
su servidor MySQL no escuchará las conexiones realizadas127.0.0.1
. Los procesos que se ejecutan en el host docker que desearían conectarse a MySQL tendrían que usar la172.17.42.1
dirección IP.modo host
Para acceder a MySQL que se ejecuta en el host de Docker desde contenedores en modo host , puede mantener
bind-address = 127.0.0.1
su configuración de MySQL y todo lo que necesita hacer es conectarse127.0.0.1
desde sus contenedores:nota: usar
mysql -h 127.0.0.1
y nomysql -h localhost
; de lo contrario, el cliente MySQL intentaría conectarse utilizando un socket Unix.fuente
telnet 172.17.0.1 3306
-v /var/run/mysqld/mysqld.sock:/tmp/mysql.sock
esta.Para macOS y Windows
Docker v 18.03 y superior (desde el 21 de marzo de 2018)
Utilice su dirección IP interna o conéctese al nombre DNS especial
host.docker.internal
que se resolverá en la dirección IP interna utilizada por el host.Soporte de Linux pendiente https://github.com/docker/for-linux/issues/264
MacOS con versiones anteriores de Docker
Docker para Mac v 17.12 a v 18.02
Igual que el anterior, pero use
docker.for.mac.host.internal
en su lugar.Docker para Mac v 17.06 a v 17.11
Igual que el anterior, pero use
docker.for.mac.localhost
en su lugar.Docker para Mac 17.05 y versiones inferiores
Para acceder a la máquina host desde el contenedor acoplable, debe adjuntar un alias de IP a su interfaz de red. Puede vincular la IP que desee, solo asegúrese de no usarla para nada más.
sudo ifconfig lo0 alias 123.123.123.123/24
Luego, asegúrese de que su servidor esté escuchando la IP mencionada anteriormente o
0.0.0.0
. Si está escuchando en localhost127.0.0.1
, no aceptará la conexión.¡Entonces solo apunte su contenedor acoplable a esta IP y podrá acceder a la máquina host!
Para probar puede ejecutar algo como
curl -X GET 123.123.123.123:3000
dentro del contenedor.El alias se restablecerá en cada reinicio, así que cree un script de inicio si es necesario.
Solución y más documentación aquí: https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
fuente
mysql -uroot -hdocker.for.mac.localhost
docker run -e HOSTNAME= docker.for.mac.host.internal
, el contenedor se crea pero no sucede nada. Entonces tengo que crtl + C. Con--net=host -e HOSTNAME=localhost
al menos el contenedor se ejecuta y se queja de que no puede encontrar el servicio que necesito (MySQL db).Estoy haciendo un truco similar a las publicaciones anteriores para obtener la IP local para asignar a un nombre de alias (DNS) en el contenedor. El principal problema es obtener dinámicamente con un script simple que funcione tanto en Linux como en OSX la dirección IP del host . Hice este script que funciona en ambos entornos (incluso en distribución Linux con
"$LANG" != "en_*"
configurado):Entonces, usando Docker Compose, la configuración completa será:
Script de inicio (docker-run.sh) :
docker-compose.yml :
Luego cambie
http://localhost
ahttp://dockerhost
en su código.Para obtener una guía más avanzada sobre cómo personalizar el
DOCKERHOST
script, eche un vistazo a esta publicación con una explicación de cómo funciona.fuente
DOCKERHOST
valor aquí en lugar de "localhost" o 0.0.0.0 en cualquier servicio al que su contenedor acoplable necesite conectarse localmente.export DOCKERHOST=$(docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' <NETWORK-NAME> | awk -F "/" 'NR==1{print $1}')
donde <NETWORK-NAME> podría ser bridge o el nombre de la red según lo definido por docker-compose (generalmente nombre de ruta - nombre_de_redicación ).dockerhost
como host para la conexión de base de datos (generalmente, reemplácelolocalhost
en el archivo de configuración).Esto funcionó para mí en una pila NGINX / PHP-FPM sin tocar ningún código o red donde la aplicación solo espera poder conectarse
localhost
Montar
mysqld.sock
desde el host al interior del contenedor.Encuentre la ubicación del archivo mysql.sock en el host que ejecuta mysql:
netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }'
Monte ese archivo donde se espera en la ventana acoplable:
docker run -v /hostpath/to/mysqld.sock:/containerpath/to/mysqld.sock
Posibles ubicaciones de mysqld.sock:
fuente
Hasta
host.docker.internal
que funcione para cada plataforma, puede usar mi contenedor actuando como una puerta de enlace NAT sin ninguna configuración manual:https://github.com/qoomon/docker-host
fuente
Solución para Linux (kernel> = 3.6).
Ok, su servidor localhost tiene la interfaz docker predeterminada docker0 con la dirección IP 172.17.0.1 . Su contenedor comenzó con la configuración de red predeterminada --net = "bridge" .
$ sysctl -w net.ipv4.conf.docker0.route_localnet=1
$ iptables -t nat -I PREROUTING -i docker0 -d 172.17.0.1 -p tcp --dport 3306 -j DNAT --to 127.0.0.1:3306
$ iptables -t filter -I INPUT -i docker0 -d 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
De la documentación del kernel :
fuente
Solución para Windows 10
Docker Community Edition 17.06.0-ce-win18 2017-06-28 (estable)
Puede usar el nombre DNS del host
docker.for.win.localhost
para resolver la IP interna. (Advertencia algunas fuentes mencionadaswindows
pero debería serwin
)Descripción general
Necesitaba hacer algo similar, es decir, conectarme desde mi contenedor Docker a mi host local, que ejecutaba el
Azure Storage Emulator
yCosmosDB Emulator
.Por
Azure Storage Emulator
defecto, escucha en 127.0.0.1 , aunque también puede cambiar la dirección IP, estaba buscando una solución que funcionara con la configuración predeterminada.Esto también funciona para conectarse desde mi contenedor Docker a ,
SQL Server
yIIS
ambos se ejecutan localmente en mi host con la configuración de puerto predeterminada.fuente
Muy simple y rápido, verifique la IP de su host con ifconfig (linux) o ipconfig (windows) y luego cree un
docker-compose.yml
De esta manera, su contenedor podrá acceder a su host. Al acceder a su base de datos, recuerde usar el nombre que especificó anteriormente, en este caso "dockerhost" y el puerto de su host en el que se ejecuta la base de datos
fuente
Ninguna de las respuestas funcionó para mí cuando usé Docker Toolbox en Windows 10 Home, pero 10.0.2.2 sí, ya que usa VirtualBox que expone el host a la VM en esta dirección.
fuente
Ethernet adapter vEthernet (DockerNAT)
Para aquellos en Windows, suponiendo que esté utilizando el controlador de red de puente, querrá vincular específicamente MySQL a la dirección IP de la interfaz de red Hyper-V.
Esto se realiza a través del archivo de configuración en la carpeta C: \ ProgramData \ MySQL normalmente oculta.
El enlace a 0.0.0.0 no funcionará. La dirección necesaria también se muestra en la configuración de la ventana acoplable, y en mi caso fue 10.0.75.1.
fuente
Editar: terminé creando prototipos del concepto en GitHub. Echa un vistazo: https://github.com/sivabudh/system-in-a-box
Primero, mi respuesta está dirigida a 2 grupos de personas: aquellos que usan una Mac y aquellos que usan Linux.
El modo de red host no funciona en una Mac. Debe usar un alias de IP, consulte: https://stackoverflow.com/a/43541681/2713729
¿Qué es un modo de red host? Ver: https://docs.docker.com/engine/reference/run/#/network-settings
En segundo lugar, para aquellos de ustedes que están usando Linux (mi experiencia directa fue con Ubuntu 14.04 LTS y estoy actualizando a 16.04 LTS en producción pronto), sí , pueden hacer que el servicio que se ejecuta dentro de un contenedor Docker se conecte a los
localhost
servicios que se ejecutan en el Docker host (por ejemplo, su computadora portátil).¿Cómo?
La clave es que cuando ejecuta el contenedor Docker, debe ejecutarlo con el modo host . El comando se ve así:
docker run --network="host" -id <Docker image ID>
Cuando haga un
ifconfig
(necesitará queapt-get install net-tools
su contenedorifconfig
sea invocable) dentro de su contenedor, verá que las interfaces de red son las mismas que las del host Docker (por ejemplo, su computadora portátil).Es importante tener en cuenta que soy un usuario de Mac, pero ejecuto Ubuntu en Parallels, por lo que usar una Mac no es una desventaja. ;-)
Y así es como se conecta el contenedor NGINX al MySQL que se ejecuta en un
localhost
.fuente
--network="host"
, ¿cómo se conecta uno al host mysql, por ejemplo?localhost
. Consulte mi código fuente de GitHub: github.com/sivabudh/system-in-a-box/blob/master/dj_host_docker/… . Busque'HOST'
, verá 127.0.0.1 para conectarse a Postgresql.La solución más simple para Mac OSX
Simplemente use la dirección IP de su Mac. En Mac, ejecute esto para obtener la dirección IP y usarla desde el contenedor:
Mientras el servidor que se ejecuta localmente en su Mac o en otro contenedor acoplable esté escuchando 0.0.0.0, el contenedor acoplable podrá comunicarse con esa dirección.
Si solo desea acceder a otro contenedor acoplable que está escuchando en 0.0.0.0, puede usar 172.17.0.1
fuente
docker.for.mac.host.internal
nombre de host ahora.Esta no es una respuesta a la pregunta real. Así es como resolví un problema similar. La solución proviene totalmente de: Definir la red de contenedores Docker para que los contenedores puedan comunicarse . Gracias a Nic Raboy
Dejando esto aquí para otros que quieran hacer llamadas REST entre un contenedor y otro. Responde a la pregunta: ¿qué usar en lugar de localhost en un entorno acoplable?
Obtenga cómo se ve su red
docker network ls
Crea una nueva red
docker network create -d my-net
Comience el primer contenedor
docker run -d -p 5000:5000 --network="my-net" --name "first_container" <MyImage1:v0.1>
Consulte la configuración de red para el primer contenedor
docker inspect first_container
. "Redes": debería tener 'my-net'Comience el segundo contenedor
docker run -d -p 6000:6000 --network="my-net" --name "second_container" <MyImage2:v0.1>
Consulte la configuración de red para el segundo contenedor
docker inspect second_container
. "Redes": debería tener 'my-net'ssh en su segundo contenedor
docker exec -it second_container sh
odocker exec -it second_container bash
.Dentro del segundo contenedor, puede hacer ping al primer contenedor
ping first_container
. Además, sus llamadas de código comohttp://localhost:5000
pueden ser reemplazadas porhttp://first_container:5000
fuente
Para ventanas,
He cambiado la URL de la base de datos en la configuración de primavera:
spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/apidb
Luego construye la imagen y corre. Funcionó para mi.
fuente
No estoy de acuerdo con la respuesta de Thomasleveil.
Hacer que mysql se vincule a 172.17.42.1 evitará que otros programas usen la base de datos en el host para llegar a él. Esto solo funcionará si todos los usuarios de su base de datos están acoplados.
Hacer que mysql se una a 0.0.0.0 abrirá la base de datos al mundo exterior, lo que no solo es algo muy malo, sino también contrario a lo que el autor de la pregunta original quiere hacer. Él dice explícitamente "MySql se ejecuta en localhost y no expone un puerto al mundo exterior, por lo que está vinculado a localhost"
Para responder el comentario de ivant
Esto no es posible. La documentación de mysql / mariadb dice explícitamente que no es posible enlazar a varias interfaces. Solo puede enlazar a 0, 1 o todas las interfaces.
Como conclusión, NO he encontrado ninguna manera de llegar a la base de datos (solo localhost) en el host desde un contenedor acoplable. Eso definitivamente parece un patrón muy común, pero no sé cómo hacerlo.
fuente
172.17.42.1
dirección. Pero su nota es correcta de lo contrario.host
127.0.0.1
0.0.0.0
y luego configure un firewall para que no se pueda acceder a la base de datos desde Internet.Aquí está mi solución: funciona para mi caso
configura el servidor mysql local para acceso público por comentario
#bind-address = 127.0.0.1
en /etc/mysql/mysql.conf.dreiniciar el servidor mysql
sudo /etc/init.d/mysql restart
ejecute el siguiente comando para abrir el acceso raíz del usuario a cualquier host
mysql -uroot -proot GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES;
crear script sh: run_docker.sh
correr con docker-compositor
fuente
Se me ocurren varias soluciones:
La razón por la que esto no funciona es que los contenedores se ejecutan con su propio espacio de nombres de red de forma predeterminada. Eso significa que localhost (o 127.0.0.1 apuntando a la interfaz loopback) es único por contenedor. Conectarse a esto se conectará al contenedor en sí y no a los servicios que se ejecutan fuera de la ventana acoplable o dentro de un contenedor de ventana acoplable diferente.
Opción 1 : si su dependencia se puede mover a un contenedor, lo haría primero. Hace que su pila de aplicaciones sea portátil mientras otros intentan ejecutar su contenedor en su propio entorno. Y aún puede publicar el puerto en su host donde otros servicios que no se han migrado aún pueden llegar a él. Incluso puede publicar el puerto en la interfaz localhost en su host docker para evitar que sea accesible externamente con una sintaxis como:
-p 127.0.0.1:3306:3306
para el puerto publicado.Opción 2 : hay una variedad de formas de detectar la dirección IP del host desde el interior del contenedor, pero cada una tiene un número limitado de escenarios donde funcionan (por ejemplo, requieren Docker para Mac). La opción más portátil es inyectar su IP de host en el contenedor con algo así como una variable de entorno o un archivo de configuración, por ejemplo:
Esto requiere que su servicio esté escuchando en esa interfaz externa, lo que podría ser un problema de seguridad. Para otros métodos para obtener la dirección IP del host desde el interior del contenedor, consulte esta publicación .
Opción 3 : ejecutar sin aislamiento de red, es decir, ejecutar con
--net host
, significa que su aplicación se ejecuta en el espacio de nombres de la red host. Esto es menos aislamiento para el contenedor, y significa que no puede acceder a otros contenedores a través de una red acoplada compartida con DNS (en su lugar, debe usar puertos publicados para acceder a otras aplicaciones en contenedores). Pero para las aplicaciones que necesitan acceder a otros servicios en el host que solo escuchan127.0.0.1
en el host, esta puede ser la opción más fácil.Opción 4 : varios servicios también permiten el acceso a través de un socket basado en un sistema de archivos. Este zócalo se puede montar en el contenedor como un volumen montado de enlace, lo que le permite acceder al servicio de host sin pasar por la red. Para acceder al motor del acoplador, a menudo ve ejemplos de montaje
/var/run/docker.sock
en el contenedor (que le da acceso a la raíz del contenedor al host). Con mysql, puede probar algo como-v /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysql.sock
y luego conectarse a lolocalhost
que mysql convierte para usar el socket.fuente
Puede obtener la ip del host usando la imagen alpina
Esto sería más consistente ya que siempre está usando alpine para ejecutar el comando.
Similar a la respuesta de Mariano, puede usar el mismo comando para establecer una variable de entorno
fuente
Para Linux, donde no puede cambiar la interfaz a la que se une el servicio localhost
Hay dos problemas que necesitamos resolver
El primer problema se puede resolver utilizando la imagen docker-host de qoomon , como lo dan otras respuestas.
Deberá agregar este contenedor a la misma red de puente que su otro contenedor para poder acceder a él. Abra una terminal dentro de su contenedor y asegúrese de poder hacer ping
dockerhost
.Ahora, el problema más difícil es hacer que el servicio sea accesible para Docker.
Podemos usar telnet para verificar si podemos acceder a un puerto en el host (es posible que deba instalarlo).
El problema es que nuestro contenedor solo podrá acceder a servicios que se unen a todas las interfaces, como SSH:
Pero los servicios vinculados solo a localhost serán inaccesibles:
La solución adecuada aquí sería vincular el servicio a la red de puentes de Dockers. Sin embargo, esta respuesta supone que no es posible cambiar esto. Entonces, en su lugar, usaremos
iptables
.En primer lugar, tenemos que encontrar el nombre de la red de puente que se está utilizando con ventana acoplable
ifconfig
. Si está utilizando un puente sin nombre, esto será asídocker0
. Sin embargo, si está utilizando una red con nombre, tendrá un puente que comienza conbr-
ese acoplador que utilizará en su lugar. El mío esbr-5cd80298d6f4
.Una vez que tengamos el nombre de este puente, debemos permitir el enrutamiento desde este puente a localhost. Esto está deshabilitado de forma predeterminada por razones de seguridad:
Ahora para configurar nuestra
iptables
regla. Dado que nuestro contenedor solo puede acceder a los puertos en la red de Docker Bridge, vamos a pretender que nuestro servicio está realmente vinculado a un puerto en esta red.Para hacer esto, enviaremos todas las solicitudes
<docker_bridge>:port
alocalhost:port
Por ejemplo, para mi servicio en el puerto 1025
Ahora debería poder acceder a su servicio desde el contenedor:
fuente
sysctl -w net.ipv4.conf.docker0.route_localnet=1
yiptables -t nat -A PREROUTING -p tcp -i docker0 --dport 1025 -j DNAT --to-destination 127.0.0.1:1025
¡Necesitas conocer la puerta de entrada ! Mi solución con el servidor local fue exponerlo debajo
0.0.0.0:8000
, luego ejecutar docker con subred y ejecutar contenedor como:Entonces, ahora puedes acceder a tu loopback a través de
http://172.35.0.1:8000
fuente
Prueba esto:
Para obtener
192.168.1.202
, utilizaifconfig
Esto funcionó para mí. ¡Espero que esto ayude!
fuente
Los CGroups y los espacios de nombres están jugando un papel importante en el ecosistema de contenedores.
El espacio de nombres proporciona una capa de aislamiento. Cada contenedor se ejecuta en un espacio de nombres separado y su acceso está limitado a ese espacio de nombres. Cgroups controla la utilización de recursos de cada contenedor, mientras que Namespace controla lo que un proceso puede ver y acceder al recurso respectivo.
Aquí está la comprensión básica del enfoque de solución que podría seguir,
Usar espacio de nombres de red
Cuando un contenedor se genera fuera de la imagen, se define y crea una interfaz de red. Esto le da al contenedor una dirección IP e interfaz únicas.
Al cambiar el espacio de nombres a host, las redes cotainers no quedan aisladas de su interfaz, el proceso tendrá acceso a la interfaz de red de las máquinas host.
Si el proceso escucha en los puertos, se escucharán en la interfaz del host y se asignarán al contenedor.
Usar el espacio de nombres PID Al cambiar el espacio de nombres Pid, un contenedor puede interactuar con otro proceso más allá de su alcance normal.
Este contenedor se ejecutará en su propio espacio de nombres.
Al cambiar el espacio de nombres al host, el contenedor también puede ver todos los demás procesos que se ejecutan en el sistema.
Compartir espacio de nombres
Es una mala práctica hacer esto en producción porque está rompiendo el modelo de seguridad del contenedor que podría abrir vulnerabilidades y facilitar el acceso a espías. Esto es solo para depurar herramientas y subestimar las lagunas en la seguridad del contenedor.
El primer contenedor es el servidor nginx. Esto creará una nueva red y procesará el espacio de nombres. Este contenedor se unirá al puerto 80 de la interfaz de red recién creada.
Otro contenedor ahora puede reutilizar este espacio de nombres,
Además, este contenedor puede ver la interfaz con los procesos en un contenedor compartido.
Esto le permitirá otorgar más privilegios a los contenedores sin cambiar o reiniciar la aplicación. De manera similar, puede conectarse a mysql en el host, ejecutar y depurar su aplicación. Pero, no es recomendable ir por este camino. Espero eso ayude.
fuente
Para la máquina de Windows: -
Ejecute el siguiente comando para exponer el puerto acoplable al azar durante el tiempo de compilación
En la lista de contenedores anterior puede ver el puerto asignado como 32768. Intente acceder
Puedes ver la página de mediawiki
fuente
Hasta que el arreglo no se fusione en la
master
rama, para obtener la IP del host simplemente ejecute desde el interior del contenedor:(como lo sugiere @Mahoney aquí ).
fuente
Lo resolví creando un usuario en MySQL para la ip del contenedor:
Luego en el contenedor:
jdbc:mysql://<b>172.17.0.1</b>:3306/database_name
fuente
La forma en que lo hago es pasar la IP del host como variable de entorno al contenedor. El contenedor luego accede al host por esa variable.
fuente