使用docker时出现DOCKER、SPRING、MYSQL ENV错误

问题描述 投票:0回答:1

当我使用 docker compose 时遇到问题,并且我在 ENV 中分配的连接字符串在 spring application.yml 中无法识别 这是我的 docker-compose.yml


version: '3'

services:
  mysqldb:
    image: mysql:8.3.0
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 23012003aA@
      MYSQL_DATABASE: checklist
    restart: always
  
  spring:
    build:
      context: ./back_end
      dockerfile: Dockerfile
    depends_on:
      - mysqldb
    environment:
      - BE_PORT=9292
      - DATASOURCE_URL=jdbc:mysql://localhost:3307/checklist
      - DATASOURCE_USERNAME=root
      - DATASOURCE_PASSWORD=123456789aA@
    ports:
      - "9292:9292"

这是我的应用程序.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/checklist?useSSL=false&createDatabaseIfNotExist=true
    username: ${DATASOURCE_USERNAME}
    password: ${DATASOURCE_PASSWORD}
  jpa:
    show-sql: false
    hibernate:
      ddl-auto: update
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

为什么当我运行它时无法识别我的连接字符串。

我尝试粘贴连接字符串,但不起作用。

它运行有关休眠的错误。

mysql spring docker
1个回答
0
投票

您似乎不清楚如何将 spring 应用程序与 docker 关联起来。

失败的原因是,虽然应用程序和数据库可能位于同一个 docker-compose 中,但它们位于独立的 docker 容器中,这意味着如果您将资源 url 指定为 localhost ,它将请求应用程序容器本身而不是数据库资源容器.

失败原因

你在docker中定义的资源应该构建在同一个网络中,除了将资源和应用程序都放在同一个网络中之外,你可以通过定义

network
来实现这一点,如下面的代码片段Docker-compose。经过上述步骤后,我们应该将资源变量注入到 spring application.yaml 中

以上操作步骤如下:

  1. 在 docker-compose 中定义网络,
  2. 查看资源地址
  3. 将数据库环境变量注入应用程序
  4. checkout spring application.yaml 从 env 读取资源

application.yaml

spring:
  datasource:
    url: ${DATASOURCE_URL}
    username: ${DATASOURCE_USERNAME}
    password: ${DATASOURCE_PASSWORD}
  jpa:
    show-sql: false
    hibernate:
      ddl-auto: update
  multipart:
    max-file-size: 10MB
    max-request-size: 10MB

Docker 组合

version: '3'

services:
  mysqldb:
    image: mysql:8.3.0
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 23012003aA@
      MYSQL_DATABASE: checklist
    restart: always
    networks:
      - my_network
  
  spring:
    build:
      context: ./back_end
      dockerfile: Dockerfile
    depends_on:
      - mysqldb
    environment:
      - BE_PORT=9292
      - DATASOURCE_URL=jdbc:mysql://mysqldb:3306/checklist?useSSL=false&createDatabaseIfNotExist=true
      - DATASOURCE_USERNAME=root
      - DATASOURCE_PASSWORD=123456789aA@
    ports:
      - "9292:9292"
    networks:
      - my_network

networks:
  my_network:
    driver: bridge


© www.soinside.com 2019 - 2024. All rights reserved.