Docker Compose部署Spring Boot+MySQL应用时出现Exit status 1错误
Spring Boot容器化连接MySQL失败(Connection refused)解决方案
你的问题核心是**depends_on仅确保MySQL容器先启动,但不保证MySQL服务完全就绪**,Spring Boot应用启动时尝试连接还未初始化完成的MySQL,导致连接被拒绝。另外还有几个小配置细节需要调整,以下是具体解决步骤:
1. 添加MySQL健康检查,确保服务就绪
修改Docker Compose配置,让api_service等待MySQL服务真正可用后再启动:
version: "3.7" services: mysql: image: mysql:5.6.33 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: roots MYSQL_DATABASE: oks healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proots"] interval: 5s timeout: 5s retries: 10 api_service: build: ./oks-api ports: - 8081:8081 depends_on: mysql: condition: service_healthy environment: spring.datasource.url: jdbc:mysql://mysql/oks?characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true spring.datasource.username: root spring.datasource.password: roots spring.profiles.active: develop
2. 修正MySQL驱动与版本兼容配置
你使用的MySQL5.6搭配mysql-connector-j-8.3.0,需要调整Hibernate方言并补充兼容参数:
# application-develop.properties spring.datasource.url=jdbc:mysql://localhost:3306/oks?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true spring.datasource.username=root spring.datasource.password=roots spring.datasource.testWhileIdle=true spring.datasource.validationQuery=SELECT 1 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect server.port=8081
3. 优化Dockerfile构建流程
当前Dockerfile的build阶段未实际执行构建,建议改为容器内完成编译,避免本地环境差异:
# 构建阶段 FROM maven:3.8.3-openjdk-17 AS build WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn clean package -DskipTests # 运行阶段 FROM openjdk:17-jdk-slim EXPOSE 8081 WORKDIR /app COPY --from=build /app/target/oks-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","app.jar"]
4. 验证启动
执行以下命令启动服务,查看日志确认MySQL健康检查通过后api_service才启动:
docker-compose up --build
内容的提问来源于stack exchange,提问作者izhar ali
相关产品推荐
相关产品推荐

