반응형
도커 응용 프로그램을 데이터베이스에 연결할 수 없습니다.
이슈 상세:
1개의 MariaDb 데이터베이스와 1개의 간단한 SpringBoot 어플리케이션이 있는 도커 컴포지트 파일이 있습니다.
docker-compose.yml 파일:
version: '3.9'
volumes:
out:
driver: local
services:
users:
image: <MY_HOST>/users:0.0.1-SNAPSHOT
container_name: users
environment:
spring.datasource.url: jdbc:mariadb://users-db:3306/users
ports:
- "9003:9003"
depends_on:
- users-db
networks:
- my-network
users-db:
image: mariadb:10.6.4
restart: always
container_name: users-db
environment:
MYSQL_ROOT_PASSWORD: admin
MYSQL_DATABASE: users
MYSQL_USER: testuser
MYSQL_PASSWORD: test
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password
networks:
- my-network
volumes:
- ./out/users_db:/var/lib/mysql
networks:
my-network:
driver: bridge
SpringBoot application.properties 파일(docker-compose.yml의 사용자 서버 이름)에는 다음과 같은 내용이 있습니다.
spring.datasource.url=jdbc:mariadb://localhost:3306/users
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.username=testuser
spring.datasource.password=test
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
logging.level.hibernate=trace
spring.datasource.hikari.data-source-properties.useUnicode=true
spring.datasource.hikari.data-source-properties.characterEncoding=UTF-8
환경변수는 application.properties 파일 내의 mariadb URL 기본값을 덮어씁니다.
실제로 데이터베이스만 실행 중이고 springboot 어플리케이션 내에서 localhost 속성을 사용하면 연결할 수 있습니다.springboot 어플리케이션을 도킹하고 service-name users-db를 사용하려고 하면 사용할 수 없게 됩니다.
도커로부터의 출력은 다음과 같습니다.
java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=users-db)(port=3306)(type=master) : Socket fail to connect to host:users-db, port:3306. Connection refused
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73) ~[mariadb-java-client-2.7.4.jar!/:na]
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:197) ~[mariadb-java-client-2.7.4.jar!/:na]
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1394) ~[mariadb-java-client-2.7.4.jar!/:na]
at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:635) ~[mariadb-java-client-2.7.4.jar!/:na]
at org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:150) ~[mariadb-java-client-2.7.4.jar!/:na]
at org.mariadb.jdbc.Driver.connect(Driver.java:89) ~[mariadb-java-client-2.7.4.jar!/:na]
이 문제에 대해 아는 사람 있나요?
언급URL : https://stackoverflow.com/questions/69540366/docker-application-not-able-to-connect-to-database
반응형
'programing' 카테고리의 다른 글
HTML(.html) 파일에 PHP 코드/파일을 추가하려면 어떻게 해야 하나요? (0) | 2022.10.23 |
---|---|
개인 GitHub 저장소에서 pip을 사용하여 패키지를 설치할 수 있습니까? (0) | 2022.10.23 |
데이터베이스 사용자의 비밀번호를 한 번 설정하려면 어떻게 해야 합니까? (0) | 2022.10.22 |
jQuery 없이 상위 절대 DIV의 하위 요소를 호버링할 때 마우스 아웃 방지 (0) | 2022.10.22 |
Node.js에서 Python 함수를 호출하는 방법 (0) | 2022.10.22 |