docker - Docker群是否会忽略Dockerfile中的VOLUME命令?

标签 docker docker-swarm docker-volume

我们正在部署堆栈,撰写文件列出了两项服务:

  • mediawiki
  • mySQL

  • 我们看到mysql Dockerfile has a VOLUME directive将数据库持久化到Docker卷

    但是,如果我们对compose文件进行docker stack rm然后docker stack deploy编码,则会丢失所有数据库内容。

    那是预期的行为吗?这样做的理由是什么?

    最佳答案

    Swarm模式不会生成Docker镜像,因此可以肯定地说docker swarm会忽略Dockerfile的每一行。生成的图像将具有标识的体积,该体积将在容器运行时创建,无论是在群集模式内部还是外部。如果您未在运行时指定卷装载,则docker将在该位置为您提供一个匿名卷,该卷稍后将难以识别,并且位于运行容器的节点的本地。使用新堆栈时,将不使用以前的匿名卷,并且在各种情况下,可以自动删除匿名卷(例如,当容器配置为在退出时自动删除时,我不确定它是否适用于swarm模式)。

    命名卷可以使数据更易于在单个节点群集中重用。进入多节点群集时,需要将此数据移出容器运行所在的节点。有关如何使用NFS之类的东西进行外部数据存储的详细信息,请参阅this answer到相关问题。

    关于docker - Docker群是否会忽略Dockerfile中的VOLUME命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151262/

    相关文章:

    docker - 如何与ECS上的其他容器共享文件或目录?

    python - 更改后,Docker卷在容器上更新,但主机未发生任何变化

    docker - 在VSTS中测试Docker容器内的应用程序

    docker - 在 docker compose 中访问 redis 数据库

    node.js - 使用 docker-sync 时合并容器文件

    docker - 为什么要使用 docker ONBUILD?

    docker - traefik+docker-compose获取let's encrypt子域证书失败

    Docker 服务在一段时间后停止通信

    docker - 使用 API 从容器中获取 Swarm 节点 IP 地址?

    docker - Docker卷偶尔安装得太晚,无法与其他容器共享文件