java - Docker id 未选择文件

标签 java spring-boot docker

我有一个证书,正在尝试将证书设置为“javax.net.ssl.keyStore”。

System.setProperty("javax.net.ssl.keyStore", "certs/certfile.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "密码");

//(完全限定路径类似于 src/main/resources/certs/certfile.p12 )

当我在本地运行时,这些属性工作正常,但在 docker conatiner 中,问题是,certs/certfile.p12 中没有这样的文件或目录。

我需要将该 certfile.p12 添加到 JAR 中的 javax.net.ssl.keyStore 中。 也接受替代解决方案。

注意:完全限定路径在 JAR 中不起作用。

提前致谢。

最佳答案

(尝试)将配置保持在镜像外部是一个很好的做法。除了这提供的明显灵 active (一个镜像具有多种可能的配置)之外,这还提供了一些安全性,因为配置(例如证书)是在外部管理的(并且可能是安全的)。

您有 2 个选择:

  • 在创建|运行容器时将 certfile.p12 安装到卷中:
docker run \
.... \
--volume=path/to/local/certfile.p12:/path/to/image/certfile.p12 \
...
  • 不建议(请参阅序言),您应在镜像中包含 certfile.p12。这需要您创建一个新镜像(需要 Dockerfile):
FROM original-image
...
ADD /path/to/local/certfile.p12 /path/to/image/certfile.p12
...

您的配置还需要设置密码。从图像中具体化这个值也是一个很好的做法。实现此目的的一种方法是使用必须从 Java 应用程序中获取的环境变量。您可以设置变量:

docker run \
...
---env=PASSWORD=password
...

关于java - Docker id 未选择文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58343887/

相关文章:

java - 在 Spring Boot 客户端中接收 Flux

Java youtube-dl 没有这样的文件或目录

java - 从 Solr 组件代码访问停用词列表

java - 如何在关系数据库中保留大字符串字段的编辑历史

java - Spring是否支持OpenJDK 12

java - Spring Boot REST API 的 @PutMapping 和 @DeleteMapping 的 HTTP 状态?

Docker 拒绝 : requested access to the resource is denied

docker - 如何触发容器启动另一个容器并在将 REST 查询传递给它时终止它?

java - Play Framework 应用程序默认使用多少最大堆空间

java - 在另一个模型中获取模型列表的正确方法