在 Docker 容器中从 Java 创建(并持久化)文件

afe*_*afe 1 java spring docker

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

Jab*_*ash 6

假设您调用的 Java 应用程序app将文件保存在:

/var/lib/data
Run Code Online (Sandbox Code Playgroud)

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

docker volume create app-data

docker run -p 8080:8080 --mount source=app-data,target=/var/lib/data app
Run Code Online (Sandbox Code Playgroud)

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

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

docker run -p 8080:8080 --volume /var/lib/data:/var/lib/data app
Run Code Online (Sandbox Code Playgroud)

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

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

请参阅:https : //docs.docker.com/storage/volumes/