programing

도커 응용 프로그램을 데이터베이스에 연결할 수 없습니다.

yoursource 2022. 10. 22. 13:39
반응형

도커 응용 프로그램을 데이터베이스에 연결할 수 없습니다.

이슈 상세:

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

반응형