【问题标题】:Docker does not update volume when updating .sql file更新 .sql 文件时 Docker 不更新卷
【发布时间】:2018-05-02 10:53:59
【问题描述】:

我有一个看起来像这样的 docker compose 文件

version: '3'
services:
  webapp:
    build: '.'
    ports: 
      - "8000:8000"
    networks:
      - db

  postgres:
    image: "postgres:alpine"
    environment:
      POSTGRES_PASSWORD: "password"
    volumes:
      - "./scripts:/docker-entrypoint-initdb.d"
    networks:
      - db
networks: 
  db:

scripts 文件夹如下所示:

|- scripts
 |-- init.sh
 |-- init.sql

问题

我的这个项目的工作流程是渐进式的,所以我在我的主机操作系统上添加了一些 SQL 初始化数据,运行sudo docker-compose down -v,然后运行sudo docker-compose up。我没有更新我的用户在这种情况下不需要使用 sudo。

当我更新init.sh 文件时,这些更新会在我每次运行docker-compose up 时反映出来。但是,init.sql 文件只记住该文件的第一个“版本”。运行docker-compose up 时将忽略任何后续更新。

我尝试过的事情

  • 试过sudo docker-compose up --renew-anon-volumes --force-recreate 似乎也没有帮助。
  • 尝试使用sudo docker volume prune 修剪所有卷。没有帮助
  • 尝试使用sudo docker system prune 修剪 docker 系统
  • 如果我将文件及其内容复制到一个新的文件名,那么会起作用。 重命名文件不起作用

所以问题很简单,如何让我的 docker compose 设置识别 init.sql 的内容更新?我不明白为什么会选择对init.sh 的更改而忽略对init.sql 的更改?

更新

一个重要的信息是该项目位于一个 virtualbox 共享文件夹中,所以底层文件系统是vboxsf,而这一切都在发生。

【问题讨论】:

    标签: linux docker docker-compose devops


    【解决方案1】:

    事实证明,底层文件系统在使用 Docker Volumes 时发挥了作用。我一直在使用 virtualbox vm,并且该项目位于 vboxsf 文件系统上。因此,当在我的 docker compose 场景中附加一个卷时(?),它一直附加到一个 vboxsf 卷。

    当我将项目从 vboxsf 文件系统移动到其他位置时(无论我的主目录文件系统有什么,ext4 我认为)然后对文件的更新按预期工作。

    ------------这里说的正在纠正中,链接很重要,要追踪-------------

    我的理解是 vboxsf 的工作方式是在主机和来宾文件系统之间广播更改,并由主机和来宾操作系统接收。还有一个方面是关于如何访问共享内存,但是我真的没有那种知识可以进一步详细说明。

    要理解这个问题,这个链接似乎是目前最好的资源: https://www.virtualbox.org/ticket/819?cversion=0&cnum_hist=70

    --------------------结束-------------------- --------------

    我认为这在生产中不会成为问题,但它肯定会让你质疑你对本地开发的理智。

    因此,当您使用 Linux 虚拟机进行开发时,请在开始处理项目之前检查您的 Docker Volumes 使用的是哪个文件系统。

    根本没有错误消息,这是调试此问题时最糟糕的情况之一!

    我还浪费了大约 2 天的生命试图弄清楚发生了什么以及如何解决它。希望这 2 天的浪费可以节省很多天:D

    【讨论】:

      猜你喜欢
      • 2020-01-12
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多