Solución:
Prueba esto docker-compose.yml
:
version: '3'
services:
workaround-mysql:
container_name: workaround-mysql
image: mysql
environment:
MYSQL_DATABASE: workaround
MYSQL_USER: springuser
MYSQL_PASSWORD: admin
MYSQL_ROOT_PASSWORD: admin
MYSQL_ROOT_HOST: '%'
ports:
- "3308:3306"
restart: always
workaround:
depends_on:
- workaround-mysql
restart: always
# will build ./docker/workaround/Dockerfile
build: ./docker/workaround
working_dir: /workaround
volumes:
- ./:/workaround
- ~/.m2:/root/.m2
expose:
- "8080"
command: "mvn clean spring-boot:run"
Y actualiza tu application.properties
para usar la siguiente URL de conexión JDBC:
spring.datasource.url=jdbc:mysql://workaround-mysql:3306/workaround?serverTimezone=UTC&max_allowed_packet=15728640
Debería funcionar cuando ambos contenedores están en el mismo archivo docker-compose, porque docker-compose crea una red predeterminada para los contenedores, por lo que pueden resolverse entre sí por su nombre.
Lo que no ha intentado hasta ahora es ejecutar ambos contenedores en la misma red Docker.
Primero, olvídese del direccionamiento IP; su uso debe evitarse por todos los medios.
En segundo lugar, inicie ambas instancias de redacción con la misma red Docker.
Tercera, no hacer Exponer puertos: dentro de la red de puente, todos los puertos son accesibles para los contenedores en ejecución.
-
Crea una red global
docker network create foo
-
Modifica ambos archivos de redacción para que utilicen esta red en lugar de crear cada uno el suyo:
version: '3.5' services: .... networks: default: external: true name: foo
-
Eliminar
expose
directivas de archivos de composición: dentro de una red, todos los puertos están expuestos de forma predeterminada -
Modifique las cadenas de conexión para usarlas por defecto
3306
puerto en lugar de3308
-
Disfrutar
Para que el servicio se conecte con MySql a través de Docker, tiene que estar en la misma red, busque en la red de Docker.
Pero para una mejor solución, le sugiero que escriba un solo archivo de composición de Docker para MySql y Spring boot. La razón es que se vinculará fácilmente cuando lo haga. No necesita ninguna otra configuración.
version: "3"
services:
mysql-service:
image: mysql
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=db
- MYSQL_USER=root
- MYSQL_PASSWORD=pass
- MYSQL_ROOT_PASSWORD=pass
spring-service:
image: springservce:latest
ports:
- "8080:8080"
depends_on:
- mysql-service