直接用 docker-compose.yml 统一编排 java 应用、mysql 和 redis,通过服务名(如 mysql、redis)实现容器间通信,无需硬编码 ip;需配置 restart、volumes、depends_on+healthcheck、环境变量及端口映射,并支持 jar 运行或源码热加载。

直接用 docker-compose.yml 把 Java 应用、MySQL 和 Redis 一起定义好,运行 docker-compose up -d 就能全部启动,不用一个个手动拉镜像、建容器、配网络。
Java 服务要能连上 MySQL 和 Redis
关键不是写对 IP 地址,而是用 Docker 内置的服务名通信。比如:
- MySQL 容器起名为
mysql,Java 里 JDBC URL 就写jdbc:mysql://mysql:3306/mydb - Redis 容器起名为
redis,Spring 配置里spring.redis.host=redis - 所有服务默认在同一个 Docker 网络下,名字就是主机名,不需要改 hosts 或硬编码 IP
Dockerfile 要适配本地开发习惯
Java 服务的镜像构建别太重,推荐两种方式:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 如果用 Maven 构建,Dockerfile 直接 COPY 打好的 JAR 包(如
target/app.jar),基于openjdk:17-jdk-slim运行 - 如果想热加载源码,可挂载本地
src/和pom.xml,再用mvn spring-boot:run启动(适合开发阶段) - 暴露端口统一设为
EXPOSE 8080,别漏掉
docker-compose.yml 必须配齐的几项
一份可靠的基础编排文件至少包含这些细节:
-
restart: unless-stopped:MySQL 和 Redis 加上它,避免意外退出后服务中断 -
volumes:给 MySQL 挂数据卷(如mysql-data:/var/lib/mysql),不然删容器就丢库 -
depends_on:+healthcheck::让 Java 应用等 MySQL 建库完成后再启动,避免连接失败报错 -
environment:把数据库密码、Redis 地址等通过环境变量传进去,比写死在配置文件里更安全灵活 - 端口映射写清楚,比如
"8080:8080"和"3306:3306",方便本地浏览器或命令行调试
初始化脚本和配置要提前准备好
MySQL 启动时自动建库建表,Redis 可按需加载配置:
- 把
init.sql放进项目目录,通过volumes挂到 MySQL 容器的/docker-entrypoint-initdb.d/下 - Java 的
application.yml或application.properties里,数据库 URL、用户名、密码保持和 compose 中 environment 一致 - Redis 如果需要密码或调优,可挂载自定义
redis.conf,否则用默认配置也够用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










