springboot应用程序无法与docker上运行的sql数据库建立连接
P粉156532706
P粉156532706 2023-08-29 09:43:41
[MySQL讨论组]

我有一个在 localhost 中运行的项目,使用 intellij 作为 Springboot 实例、使用 Xampp 的 SQL 没有任何问题。这工作得很好。但现在我想将所有内容都部署到 docker 上。所以我在我的目录中创建了一个 dockerfile 和一个 docker-compose up 文件,如下所示:

-Application
 |
  -Frontend (not in docker implemented yet)
  -Backend (springAPI)
   |
    -dockerfile
  -Python (flaskAPI) (not in docker implemented yet)
docker-compose.yml

docker-compose.yml 如下所示:

version: '3.9'

services:
  db:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: <pass>
      MYSQL_DATABASE: mydb
      MYSQL_USER: <user>
      MYSQL_PASSWORD: <pass>
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    depends_on:
      - db
    ports:
      - "8888:80"
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: example

  spring-api:
    image: spring-api:latest
    ports:
      - "8080:8080"
    depends_on:
      - db

volumes:
  dbdata:
  mysql-data:

springapi 的 dockerfile 如下所示:

# Use an official OpenJDK runtime as a parent image
FROM openjdk:17-jdk-slim

# Set the working directory to /app
WORKDIR /app

# Copy the application jar file to the container
COPY build/libs/backendAPI.jar backendAPI.jar

# Run the application
CMD ["java", "-jar", "backendAPI.jar"]

这可以由 docker 组成并运行容器。 java spring boot 如何抛出错误并关闭。错误是:

`2023-03-06T12:25:37.603Z  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...

2023-03-06T12:25:38.685Z ERROR 1 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.


com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure


The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.`

我尝试像这样重新配置我的 application.settings :

spring.datasource.url=jdbc:mysql://localhost:8888/mydb
spring.datasource.username=<theusername>
spring.datasource.password=<thepassword>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

但是没有效果。因为它一直抛出相同的错误。可以通过给定的 url 访问 SQL 服务器。所以运行良好(除了没有管理员权限,但这是一个不同的问题。)

当我只使用 Xammp 和 intellij 时,这个设置对 application.settings 进行了一些调整,效果很好。但现在我无法连接它。我在这里缺少什么?

编辑我迄今为止尝试过的内容

db:
    image: mysql:latest
    restart: always
    container_name: sql-db

然后更改 application.settings:

spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (and also with sql-db:3306)

但这仍然给出相同的错误。

P粉156532706
P粉156532706

全部回复(1)
P粉510127741

在 docker compose 文件中为您的数据库服务指定一个容器名称

db:
    image: mysql:latest
    restart: always
    **container_name: db-container**

然后在您的 jdbc url 中,您应该引用配置的数据库容器名称和数据库容器的实际配置端口。

所以你的 datasource.url 看起来像

spring.datasource.url=jdbc:mysql://db-container:3306/mydb
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号