我正在开发一个旨在在Docker容器中运行的Java Spring Boot应用程序。运行图像时,我需要应用程序检查路径中是否存在文件,如果不存在则创建该文件。当我停止容器并再次启动它时,该文件再次丢失。 我该如何实现?我需要在主机上装载卷吗?
答案 0 :(得分:2)
假设您的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
的持久卷中
您还可以按以下方式在主机和容器之间绑定目录:
docker run -p 8080:8080 --volume /var/lib/data:/var/lib/data app
这会将所有内容存储在主机上的/var/lib/data
中,而不是容器中。这样,下次启动容器时,它将从那里读取。
我通常会选择第一个选项,因为我有一个要存储的数据的名称,它并没有改变主机的“状态”(可以说仍然是,但很小)。如果主机上运行的任何其他进程触摸该目录,则绑定目录会留出错误的空间。
答案 1 :(得分:0)
好吧,如@Ben所说,当我停止/启动容器而不是运行容器时,它工作正常。