Arangodb、Foxx 和 Docker 的卷

Arangodb, Foxx, and Docker with volume

我正在使用 ArangoDB 并开发 Foxx 应用程序。 ArangoDB 使用此图像 https://store.docker.com/images/arangodb 在 Docker 容器中托管。我有另一个 Docker 容器,它是 运行 我的应用程序前端。

我创建了一个卷来保存数据库数据,我还创建了一个卷来保存 Foxx 应用程序数据:

  - type: volume
    source: databasedev
    target: /var/lib/arangodb3
  - type: volume
    source: foxx
    target: /var/lib/arangodb3-apps

最后,我创建了一个从我的 Foxx 源文件夹到我的 ArangoDB 容器中的 Foxx 应用程序文件夹的绑定挂载:

  - type: bind
    source: C:\[pathtosource]\src\foxx
    target: /var/lib/arangodb3-apps/_db/poflow

在我编写 Foxx 源代码时,大约有 40-50% 的时间会被删除。我试过在 Foxx 卷上使用 "no-copy" 选项,但它似乎只会让情况变得更糟。

在我的容器在我的前端容器中组成一个节点脚本后,尝试安装我的 Foxx 服务并将其设置为开发模式。基本上,它会即时压缩我的 Foxx 源代码并进行安装。但是它经常发现我的Foxx源文件夹是空的并且失败,然后我恢复文件,然后写下来,然后备份再试。

我做错了吗?有什么我想念的吗?似乎 ArangoDB 并不是每次都保留 Foxx 数据。

我可能找到了解决办法。我没有直接在我的撰写文件中使用 public ArangoDB docker 图像,而是改用 docker 文件构建我自己的图像。

之前:

database:
    image: "arangodb"

之后:

  database:
    image: "arangodb"
    build:
      context: .
      dockerfile: dock-arango-dev.Dockerfile

然后我的 docker 文件如下所示:

FROM arangodb
ENV ARANGO_ROOT_PASSWORD supersecurepass
WORKDIR /var/lib
COPY "./src/foxx" "./arangodb3-apps/_db/foxxapp"
EXPOSE 8529

我认为 docker 文件中的复制指令是关键所在。到目前为止,它一直运行良好。如果继续这样下去,我会在几天后接受这个答案。

编辑: 不幸的是,这并没有 100% 解决问题,尽管它有所改进。所以我不会将此标记为答案,但这是一个很有帮助的步骤。

编辑: 使用这种方法几个星期后,我只失败了一次。所以也许那是侥幸。但这种方法肯定比我以前的技术更有效。所以我将其标记为答案。如果有人提供更可靠的更好的工作流程或方法,我会更改答案。

我之前的回答有一段时间的帮助,直到项目变得更加复杂并涉及更多 Foxx 微服务。我决定 post 一个单独的答案来让事情更清楚,而不是创建一个大而复杂的答案。

在使用与 Arango 的绑定进行大量测试后,Arango 设置其 Foxx 服务目录的方式似乎与 Docker 创建其绑定的方式存在冲突。也许如果 Docker 有办法将绑定创建延迟到 Arango 启动并配置它的 Foxx 服务之后,事情可能会奏效。但似乎存在冲突,而且 Dockers 绑定似乎经常破坏 Foxx 服务。在许多情况下,来自一项服务的源文件会进入另一项服务。很奇怪。

所以我的解决方案是完全放弃使用绑定进行开发。相反,我创建了一个利用 ArangoJS 驱动程序和名为 chokidar 的 NPM 库的脚本。这个脚本会监视我的 foxx 源目录,并在任何时候保存更改,它会使用 ArangoJS 驱动程序通过 HTTP 替换 foxx 服务。我认为它可能效率低下,但实际上它非常快速和有效,并且它规避了我在 Docker.

中遇到的所有问题

我很乐意看到 Arango 拥抱 Docker 更全面地支持他们的 Foxx 服务,但与此同时,这个解决方案似乎非常适合我的需要。