Si tengo una base de datos mysql ejecutándose en alguna máquina host, y ese host también ejecuta un contenedor acoplable: ¿Cómo accedería a la base de datos mysql desde el contenedor acoplable que se ejecuta en el host?
Por ejemplo, ¿hay alguna manera de publicar un puerto de hosts en el contenedor (lo contrario de lo que hace Docker run -p)?
Respuestas:
Hay varias discusiones de larga data sobre cómo hacer esto de una manera consistente, bien entendida y portátil. No hay una resolución completa pero lo vincularé a las discusiones a continuación.
En cualquier caso, puede intentar usar la opción --add-host para ejecutar Docker para agregar la dirección IP del host en el archivo / etc / host del contenedor. Desde allí, es trivial conectarse al host en cualquier puerto requerido:
Documentación:
https://docs.docker.com/engine/reference/commandline/run/
Debates sobre cómo acceder al host desde el contenedor:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023
fuente
De los 18.03 documentos:
EJEMPLO: Esto es lo que uso para mi cadena de conexión MySQL dentro de mi contenedor para acceder a la instancia de MySQL en mi host:
fuente
Desde Docker 17.06 en adelante, un nombre DNS especial solo para Mac está disponible en los contenedores de Docker que se resuelve en la dirección IP del host. Es:
docker.for.mac.localhost
La documentación está aquí: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
fuente
docker.for.mac.host.internal
de enDocker 17.12.0 ce
adelante. docs.docker.com/docker-for-mac/release-notes/…docker.for.mac.localhost
funciona en18.03.1-ce-mac65
Use host.docker.internal desde Docker 18.03 en adelante.
fuente
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
Otras respuestas no funcionaron bien para mí. Mi contenedor no pudo resolver la ip del host usando host.docker.internal . Hay dos maneras
Compartir red de host --net = host:
Usando la dirección IP de Docker , que generalmente es 172.17.0.1 . Puede verificarlo llamando al comando ifconfig y tomando inet addr de la interfaz docker
Una vez que tenga esta dirección IP, puede pasarla como un argumento para ejecutar Docker y luego a la aplicación o, como lo hago, mapear la ubicación de jdbc.properties por volumen al directorio en la máquina host, para que pueda administrar el archivo externamente .
NOTA: es posible que su base de datos no permita conexiones externas. En el caso de postgresql, debe editar 2 archivos, como se describe aquí y aquí :
Edite postgresql.conf para escuchar en todas las direcciones. Por defecto apuntará a localhost.
Edite pg_hba.conf para permitir conexiones desde todas las direcciones. Agregue en la última línea:
IMPORTANTE: el último paso para actualizar el acceso a la base de datos no se recomienda para uso en producción a menos que esté realmente seguro de lo que está haciendo.
fuente