直接用 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 服务的镜像构建别太重,推荐两种方式:
- 如果用 Maven 构建,Dockerfile 直接 COPY 打好的 JAR 包(如
target/app.jar),基于openjdk:17-jdk-slim运行 - 如果想热加载源码,可挂载本地
src/和pom.xml,再用mvn spring-boot:run启动(适合开发阶段) - 暴露端口统一设为
EXPOSE 8080,别漏掉
docker-compose.yml 必须配齐的几项
一份可靠的基础编排文件至少包含这些细节:
立即学习“Java免费学习笔记(深入)”;
-
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,否则用默认配置也够用


















