java - 在 Docker 容器中从 Java 创建(并保留)文件

标签 java spring docker

我正在开发一个旨在在 Docker 容器中运行的 Java Spring Boot 应用程序。当我运行图像时,我需要应用程序检查路径中是否存在文件,如果不存在则创建它。当我停止容器并再次启动它时,文件再次丢失。 我怎样才能实现这个目标?我需要在主机上安装卷吗?

最佳答案

假设您的 Java 应用程序名为 app,它将文件保存在:

/var/lib/data

然后您应该按如下方式启动容器:

docker volume create app-data

docker run -p 8080:8080 --mount source=app-data,target=/var/lib/data app

这会将您的所有数据存储在名为 app-data 的持久卷中

您还可以在主机和容器之间绑定(bind)目录,如下所示:

docker run -p 8080:8080 --volume /var/lib/data:/var/lib/data app

这会将所有内容存储在主机上的 /var/lib/data 中,而不是容器中。这样,下次启动容器时,它就会从那里读取。

我通常选择第一个选项,因为我有一个正在存储的数据的名称,并且它不会改变主机的“状态”(可以说仍然是,但非常少)。如果主机上运行的任何其他进程接触到该目录,则绑定(bind)目录会留下出错的空间。

参见:https://docs.docker.com/storage/volumes/

关于java - 在 Docker 容器中从 Java 创建(并保留)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51148508/

相关文章:

java - Camel : Skipping multiple header lines in Fixed Length File returns iterator object reference

c# - 自动装箱和拆箱在 Java 和 C# 中的行为是否不同

java - Android 中的自定义编程语言(jar)

python - 从Google Cloud Run执行记录的最简单方法

python-3.x - 无法在 Binder 中提供 jupyter 笔记本

java - 如何在Java中的Elasticsearch索引文档中插入唯一数据

java - Spring Flux 和 Async 注释

java - 多个url映射到同一个controller方法时,查找哪个url访问controller

java - 注释为的类或子类的方面

angular - 错误 TS2687 : All declarations of 'observable' must have identical modifiers