我正在开发一个旨在在 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)目录会留下出错的空间。
关于java - 在 Docker 容器中从 Java 创建(并保留)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51148508/