当我使用 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
为什么当我运行它时无法识别我的连接字符串。
我尝试粘贴连接字符串,但不起作用。
它运行有关休眠的错误。
您似乎不清楚如何将 spring 应用程序与 docker 关联起来。
失败的原因是,虽然应用程序和数据库可能位于同一个 docker-compose 中,但它们位于独立的 docker 容器中,这意味着如果您将资源 url 指定为 localhost ,它将请求应用程序容器本身而不是数据库资源容器.
你在docker中定义的资源应该构建在同一个网络中,除了将资源和应用程序都放在同一个网络中之外,你可以通过定义
network
来实现这一点,如下面的代码片段Docker-compose。经过上述步骤后,我们应该将资源变量注入到 spring 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
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