使用 Spring Boot 和 Docker 的外部属性文件

Posted

技术标签:

【中文标题】使用 Spring Boot 和 Docker 的外部属性文件【英文标题】:External properties file using Spring Boot and Docker 【发布时间】:2016-09-15 01:10:54 【问题描述】:

我无法配置 Dockerfile 以在 Spring Boot 中使用外部属性文件。这是我的 Dockerfile:

FROM java:8-jre 
VOLUME /tmp /var/gpm/config
ADD gpm-web-1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-cp","/var/gpm/config","-Dspring.config.location=classpath:application.properties","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

在我的主机中,我有这个属性文件的路径:/var/gpm/config/application.properties

但是,不工作。

更新

我通过以下方式更改 Dockerfile:

FROM java:8-jre
VOLUME /tmp
ADD gpm-web-1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.config.location=file:/conf/application.properties"]

然后运行:

docker run -d -p 8080:8080 -v /opt/gpm/config/application.properties:/conf/application.properties --name gpm gpm-web:1.0

但是,文件就像一个文件夹:

root@b7349202b6d3:/# ls -la /conf/
total 8
drwxr-xr-x  3 root root  4096 May 18 16:43 .
drwxr-xr-x 74 root root  4096 May 18 16:55 ..
drwxr-sr-x  2 root staff   40 May 18 16:43 application.properties 

【问题讨论】:

你有没有在运行时猛击容器并检查文件是否在卷中可用? 你好!挂载的文件夹,但是文件夹是空的,看不到application.properties文件。 使用 docker inspect 命令并检查 Mounts 我更新了这篇文章,inspect 命令显示:"Mounts": [ "Source": "/opt/gpm/config/application.properties", "Destination": "/conf/application .properties", "Mode": "", "RW": true ls -la /conf/ 你在哪里执行的?所以它似乎可用,你之前说文件夹是空的 【参考方案1】:

我认为您只需要将卷安装到 conf 文件夹,例如

docker run -d -p 8080:8080 -v /opt/gpm/config:/conf --name gpm gpm-web:1.0

【讨论】:

【参考方案2】:

最后,问题在于要挂载到 Docker 容器中的文件的权限。如果在主机中找不到原始文件,Docker 会创建一个目录。

感谢@Shibashis 的帮助。

【讨论】:

以上是关于使用 Spring Boot 和 Docker 的外部属性文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 和 Docker 的外部属性文件

spring-boot项目的docker集成化部署

Spring Boot 2.0:使用 Docker 部署 Spring Boot

Spring Boot 2.0:使用 Docker 部署 Spring Boot

Docker:无法连接 Spring Boot 和 MYSQL

Docker 中的 Consul 和 Spring Boot 服务 - 不取消注册