You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose创建的Vaadin应用与MariaDB容器无法通信求助

问题解决:Vaadin容器无法连接MariaDB启动后退出

问题现象

使用Docker Compose部署Vaadin应用与MariaDB数据库时,Vaadin容器启动几秒后即退出,日志输出数据库连接被拒绝(Connection refused),即使配置自定义网络也无法解决该问题。

核心原因

depends_on仅能保证容器的启动顺序,无法确保MariaDB服务完全初始化就绪,Vaadin应用启动时数据库仍处于初始化状态,导致连接失败;此外,Hibernate方言配置与MariaDB版本不匹配也会引发兼容性问题。

解决方案

1. 给MariaDB添加健康检查,等待服务就绪后启动Vaadin

修改docker-compose.yml,为mariadb服务配置健康检查,同时让vaadin-app依赖数据库的健康状态,并添加失败重启机制:

version: "3.8"

services:
 vaadin-app:
  build:
   context: .
  container_name: vaadin-app
  ports:
   - 8080:8080
  depends_on:
   mariadb:
     condition: service_healthy  # 等待数据库健康检查通过后再启动
  restart: on-failure  # 连接失败时自动重试启动

 mariadb:
  image: "mariadb:10.5.8"
  container_name: mariadb
  environment:
   MYSQL_ROOT_PASSWORD: test
   MYSQL_DATABASE: Test
   MYSQL_USER: test2
   MYSQL_PASSWORD: test2
  volumes:
   - data:/var/lib/mysql
  ports:
   - 3306:3306
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-ptest"]
    interval: 5s
    timeout: 5s
    retries: 5

volumes:
 data:

2. 修正Hibernate方言适配MariaDB版本

当前使用的MariaDB 10.5.8需匹配专用的MariaDB方言,而非MySQL8方言。修改application.properties:

# 替换原有MySQL8Dialect为对应版本的MariaDB方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB103Dialect

3. 可选:增强应用连接重试能力

若仍存在偶发连接问题,可在application.properties中添加数据库连接池的重试配置:

# 数据库连接池重试配置
spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.connection-test-query=SELECT 1

验证步骤

  1. 清理原有容器与数据卷:docker-compose down -v
  2. 重新构建并启动服务:docker-compose up --build
  3. 查看Vaadin容器日志确认连接成功:docker logs vaadin-app

内容的提问来源于stack exchange,提问作者GörmenProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:15:03