Ola,
Estava na aula de como fazer a comunicacao entre containers e o professor usou um exemplo de uma imagem ubuntu. Porem na minha maquina eu tenho uma aplicacao em Java/SpringBoot e queria conectar a imagem dela com o banco de dados que uso que tambem é uma imagem docker. Ao rodar os seguintes comandos a aplicacao na hora de dar o run na imgem nao consegue se conectar no banco.
Este é o docker-compose do banco de dados local:
version: '2'
services:
mysql:
container_name: mysql
restart: always
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: 'sa123456'
MYSQL_USER: 'sa'
MYSQL_PASS: 'sa123456'
ports:
- 3306:3306
volumes:
- /home/diego/dockers/mysql/data:/var/lib/mysql
networks:
- minha-rede
networks:
minha-rede:
driver: bridge
Ao dar um docker inspect nele, encontro a seguinte informacao na aba de network:
"Networks": {
"mysql_minha-rede": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"f0cd5ac24e79",
"mysql"
],
"NetworkID": "a4a8159c8b33257c351974eebb7a0ff35c4a8c0368d3798a61f037fbce4e99b0",
"EndpointID": "182531cf9d6c63ab32ac88d3413a03ad57447f081f510e2908678ab4ed641cfb",
"Gateway": "172.21.0.1",
"IPAddress": "172.21.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:15:00:02",
"DriverOpts": null
}
}
Entao eu copiei este ip e coloquei no properties da minha aplicacao:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://172.21.0.2:3306/master?createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=sa123456
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
O meu dockerfile esta assim:
FROM openjdk:11
ADD target/buscadorvalor-1.0.0.jar buscadorvalor.jar
ENTRYPOINT [ "java","-jar","-Dspring.profiles.active=build","buscadorvalor.jar" ]
Se eu rodo o dockerifle ele nao consegue se conectar no banco. Se eu pego o id gerado pelo dockerfile e rodo o seguinte comando:
docker run dc87233aa137 -d --network mysql_minha-rede
Ele tambem nao consegue se conectar ao banco de dados que foi declarado ali em cima.
Poderia me dizer aonde estou errado por favor.