dany giguere
07/19/2022, 6:39 PMversion: '3.7'
services:
#MySQL Service
db:
image: mysql:5.7.22
container_name: ${DOCKER_CONTAINER_NAME_SLUG}_db
restart: unless-stopped
tty: true
ports:
- ${DOCKER_MYSQL_PORTS}
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- my-network
#Docker Networks
networks:
my-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
then in a different spring boot project, I have this docker-compose file:
version: '3'
services:
app:
container_name: api-app
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
networks:
default:
external:
name: my-network
it fails to build because I get this error:
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
Anyone see the problem ?Ties
07/19/2022, 7:54 PMMikhail
07/19/2022, 10:25 PMexpose
clause:
expose:
- 1234
Also, use container name as a host in your connection string.
A docker-compose.yml file from one of my projects might help you
version: '3'
volumes:
db-data-postgres:
driver: local
db-data-postgres-config:
driver: local
services:
linda-postgres:
image: postgres:15beta2-bullseye
container_name: linda-postgres
environment:
POSTGRES_DB: "linda_data"
POSTGRES_USER: "linda_data"
POSTGRES_PASSWORD: "linda_data"
PGDATA: /var/lib/postgresql/data/pgdata
restart: always
expose:
- 5432
networks:
- linda-net
volumes:
- db-data-postgres:/var/lib/postgresql/data
- db-data-postgres-config:/var/lib/postgresql/dataConfig
linda:
image: linda:0.8.0-beta.0
container_name: linda
networks:
- linda-net
ports:
- "9292:9292"
depends_on:
- linda-postgres
environment:
SPRING_DATASOURCE_URL: jdbc:<postgresql://linda-postgres:5432/linda_data>
restart: on-failure
networks:
linda-net:
driver: bridge
Mikhail
07/19/2022, 10:26 PMDockerfile
???
You simply do ./gradlew bootBuildImage
dany giguere
07/19/2022, 10:30 PMFROM gradle:7.5.0-jdk17-alpine as builder
USER root
WORKDIR /builder
ADD . /builder
RUN gradle build --info
FROM openjdk:17-alpine
WORKDIR /app
EXPOSE 8080
COPY --from=builder /builder/build/libs/demo-0.0.1-SNAPSHOT.jar .
CMD ["java", "-jar", "demo-0.0.1-SNAPSHOT.jar"]
dany giguere
07/20/2022, 12:58 PMdany giguere
07/20/2022, 1:01 PMversion: '3.7'
services:
#MySQL Service
db:
image: mysql:5.7.22
container_name: ${DOCKER_CONTAINER_NAME_SLUG}_db
restart: unless-stopped
tty: true
expose:
- "3306"
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- my-network
#Docker Networks
networks:
my-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
I’ve also added the SPRING_DATASOURCE_URL: jdbc:<mysql://localhost:3306/kotlin_demo_app>
config to my spring boot docker-compose:
version: '3'
services:
app:
container_name: api-app
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:<mysql://localhost:3306/kotlin_demo_app>
restart: on-failure
networks:
- my-network
#Docker Networks
networks:
my-network:
driver: bridge
But I still get the same error Could not create connection to database server. Attempted reconnect 3 times
Ties
07/20/2022, 1:03 PMMikhail
07/20/2022, 1:10 PMlocalhost
dany giguere
07/20/2022, 3:29 PMMikhail
07/20/2022, 3:33 PMapplication.yml
file I use localhost
. But when running with docker-compose
I override the host by defining SPRING_DATASOURCE_URL
env var in my docker-compose.yml
filedany giguere
07/20/2022, 5:58 PMversion: '3'
volumes:
dbdata:
driver: local
services:
docker_db:
image: mysql:5.7.22
container_name: docker_db
restart: unless-stopped
tty: true
expose:
- "3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: kotlin_demo_app
MYSQL_USER: root
MYSQL_PASSWORD: root
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- docker_db-net
app:
container_name: api-app
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:<mysql://docker_db:3306/kotlin_demo_app?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false>
depends_on:
- docker_db-net
networks:
- docker_db-net
restart: on-failure
networks:
docker_db-net:
driver: bridge
but I still get the same error Could not create connection to database server
. Btw, you can view the entire project here : https://github.com/danygiguere/springboot-kotlin-example