A través de docker-compose.yml
puedo ejecutar la aplicación. Ahora queremos mover la aplicación a producción, pero no queremos usar la base de datos del contenedor. Entonces, ¿hay alguna forma de que pueda conectar mi base de datos MySQL local con la aplicación que usa docker-compose
?
Mi docker-compose.yml se ve así:
version: '3'
services:
web-app:
build:
context: .
dockerfile: web-app/Dockerfile
ports:
- 8080:8080
links:
- app-db
app-db:
build:
context: .
dockerfile: app-db/Dockerfile
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=Optimize
ports:
- 3306:3306
En lugar de app-db
parte, solo quiero conectarme a mi mysql
base de datos alojada localmente .
Busque la ip de la máquina host en la red de Docker. Si utiliza ventana acoplable-compose.yml version: "3"
es probable que sea que esa IP es: 172.18.0.1
, pero confirman que la búsqueda de la "entrada" de su contenedor (el anfitrión):
docker inspect <container-id-or-name> | grep Gateway
"Gateway": "",
"IPv6Gateway": "",
"Gateway": "172.18.0.1",
"IPv6Gateway": "",
Entonces, dentro de su aplicación Docker, apunte a MySQL como esto: 172.18.0.1:3306
(tal vez en un archivo de configuración). Tenga en cuenta que esa IP es fija siempre que la red de la ventana acoplable siga siendo la misma (la red la crea la ventana acoplable-compose y no se elimina a menos que usted lo haga docker-compose down
)
Además, verifique que su MySQL esté escuchando todas sus interfaces. En su my.cnf
búsqueda, bind-address
debería ser 0.0.0.0
(considere los problemas de seguridad si su servidor tiene una IP pública).
Como alternativa, puede traer al contenedor la misma red que su host, para compartir el localhost, por lo que el contenedor encontrará mysql allí. Utilice el modo de red como "host":
version: '3'
services:
web-app:
build:
context: .
dockerfile: web-app/Dockerfile
ports:
- 8080:8080
network_mode: "host"
Luego, apunte en su hibernate.properties
mysql como este:localhost:3306
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras