" />
本ページはプロモーションが含まれています。

スポンサーリンク

Docker

docker-SpringBoot-MySQLでアプリからMySQLに接続できない問題

結論:docker環境のSpringBootコンテナからMySQLコンテナに接続する場合、docker-compose.ymlのenvironment:で接続情報を渡す必要があります。

docker-SpringBoot-MySQLでアプリからMySQLに接続できた例

version: "3.8"
services:
  app:
    tty: true
    container_name: okozukai-system
    build:
      context: ./app
      args:
        JAR_FILE: ./okozukai-system.jar
    ports:
      - "8085:8080"
    networks:
      okozukai-network:
    depends_on:
      - db
    environment:
      spring.datasource.driverClassName: "com.mysql.cj.jdbc.Driver"
      spring.datasource.url: "jdbc:mysql://db/okozukai"
      spring.datasource.username: "okozukaiadmin"
      spring.datasource.password: "xxxxxx"
  db:
    container_name: okozukai-db
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_DATABASE: okozukai
      MYSQL_USER: okozukaiadmin
      MYSQL_PASSWORD: xxxxxx
      MYSQL_ROOT_PASSWORD: rootpassword
    platform: linux/x86_64
    expose:
      - 3306
    ports:
      - 3306:3306
    volumes:
      - ./db/data:/var/lib/mysql
    networks:
      okozukai-network:

application.ymlの設定情報は無視されるようです。

spring:
  ## DB接続情報
  dataSource:
    url: jdbc:mysql://localhost/okozukai
    username: okozukaiadmin
    password: xxxxxx
    driver-class-name: com.mysql.cj.jdbc.Driver

docker-SpringBoot-MySQLでアプリからMySQLに接続できなかった例

version: "3.8"
services:
  app:
    tty: true
    container_name: okozukai-system
    build:
      context: ./app
      args:
        JAR_FILE: ./okozukai-system.jar
    ports:
      - "8085:8080"
    networks:
      okozukai-network:
    depends_on:
      - db
  db:
    container_name: okozukai-db
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_DATABASE: okozukai
      MYSQL_USER: okozukaiadmin
      MYSQL_PASSWORD: lknuve7gAre
      MYSQL_ROOT_PASSWORD: rootpassword
    platform: linux/x86_64
    expose:
      - 3306
    ports:
      - 3306:3306
    volumes:
      - ./db/data:/var/lib/mysql
    networks:
      okozukai-network:

SpringBootにおいてDBの接続情報はapplication.yml(.properties)に記述していると思います。

spring:
  ## DB接続情報
  dataSource:
    url: jdbc:mysql://db/okozukai
    username: okozukaiadmin
    password: lknuve7gAre
    driver-class-name: com.mysql.cj.jdbc.Driver

docker-compose.ymlにMySQLのサービス名は"db"なので、application.ymlの接続URLも"localhost"ではなく、"db"にしていたのですが、これだけ接続できませんでした。

(CommunicationLinkFailureというエラーが発生しました)

スポンサーリンク

-Docker