docker - postgresql的这个官方Dockerfile中的VOLUME有什么用
问题描述
我在官方postgresql的Dockerfile中找到了如下代码。https://github.com/docker-library/postgres/blob/master/11/Dockerfile
ENV PGDATA /var/lib/postgresql/data
RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA" # this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values)
VOLUME /var/lib/postgresql/data
我想知道 VOLUME 在这方面的目的是什么。
VOLUME /var/lib/postgresql/data
据我了解,当我们启动容器时,它会创建一个新的存储卷,并且当容器被移除时,该存储卷也将被永久删除(docker stop contianerid; docker rm containeid
)
那么如果数据不会持续存在,那么为什么要使用它。因为如果我们希望数据持久存在,则使用 VOLUME。
我的问题是,如果 postgres 数据只会保留到容器运行,然后一切都被清除,那么它的用途是什么。如果我做了很多工作,最后一切都消失了,那还有什么用。
解决方案
据我了解,它会在我们启动容器时创建一个新的存储卷,并且在删除容器时该存储卷也将被永久删除(docker stop contianerid; docker rm containereid)
如果您使用该--rm
选项运行容器,则在容器退出时会删除匿名卷。--rm
如果您在创建容器时没有传递该选项,那么该-v
选项docker container rm
也会删除卷。否则,这些匿名卷将在停止/rm 之后持续存在。
也就是说,匿名卷很难管理,因为不清楚哪个卷包含哪些数据。特别是对于像 postgresql 这样的图像,我希望他们VOLUME
从 Dockerfile 中删除该行,而是提供一个用名称定义卷的 compose 文件。您可以在我的回答中看到更多关于这VOLUME
条线的作用以及它为什么会产生问题的信息。
推荐阅读
- python-3.x - 如何使用 xlsxwriter 在格式方法中使用字符串值
- python - itertools.groupby 的反面?
- python - 如何比较数据框行的特定条件?
- javascript - 我们可以在 Shopify 上添加 CSS 类吗?
- python - Pandas 根据条件更快地移动多行
- azure-alerts - 如何监视 Azure SQL 中的表是否为空?
- c# - 棱镜多窗口/叠加显示
- java - 这是哪种类型的列表,如何访问 tokenValue?
- ionos - 如何将 Ionos 上部署的 API 集成到 React 前端
- docker - 如何从 podman 重用 docker 格式的图像存储