springboot docker部署yml外置
时间: 2024-12-29 07:21:02 浏览: 8
### Spring Boot Docker 部署使用外部 YML 文件
当构建基于 Spring Boot 的应用程序时,有时需要将配置文件与镜像分离以便于管理和维护。这可以通过挂载卷的方式实现,从而允许在不同环境中轻松切换配置。
对于 Maven 构建工具而言,POM 文件会继承 `spring-boot-starter-parent` 工程并声明一个或多个“Starters”依赖[^2]。然而,在涉及 Docker 容器化的过程中,则需考虑如何处理这些配置项而不硬编码入镜像内。
#### 创建 Dockerfile 支持外部配置
为了支持从主机加载外部 `.yml` 或者其他类型的属性文件到运行中的容器里,可以在编写 Dockerfile 时不指定任何特定的应用程序参数设置:
```dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom"]
CMD ["-jar","/app.jar"]
```
这里的关键在于定义了一个名为 `/config/application.yml` 的卷用于存储自定义配置文件,并且通过 `-Dspring.config.location` 参数告知 JVM 去哪里寻找额外的资源配置位置。
#### 修改启动命令以引用外部配置
接着修改 CMD 行来接受来自宿主机上的路径作为输入源之一:
```dockerfile
CMD ["java", "-Dspring.profiles.active=prod", "-Dspring.config.location=/config/", "-jar", "/app.jar"]
```
上述指令意味着如果存在位于 `/config/application-{profile}.yml` 中的内容将会被优先读取而不是默认打包进去的那个版本。
#### 运行带有外部配置的容器实例
最后一步是在实际部署阶段确保正确设置了环境变量以及指定了目标目录下的具体文件名。例如:
```bash
docker run \
-v $(pwd)/external-config:/config \
my-springboot-app:latest
```
此命令假设当前工作区有一个叫做 `external-config` 的子文件夹包含了所有必要的 YAML 设置文档。它会被映射至容器内部的 `/config` 路径之下供 Java 应用访问。
阅读全文