代码之家  ›  专栏  ›  技术社区  ›  skinneejoe

Arangodb、Foxx和Docker(带卷)

  •  3
  • skinneejoe  · 技术社区  · 7 年前

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

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

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

    最后,我在arangodb容器中创建了一个从foxx源文件夹到foxx app文件夹的绑定装载:

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

    大约40-50%的时间,当我组成我的福克斯源代码被删除。我试过在Foxx卷上使用“不复制”选项,但它似乎只会使情况更糟。

    在我的容器在我的前端容器中组成一个节点脚本之后,容器试图安装我的FoxX服务并将其设置为开发模式。基本上,它可以快速压缩我的FoxX源并安装它。但它经常会发现我的FoxX源文件夹是空的,并且失败了,这时我恢复文件,然后写下来,然后备份,再试一次。

    我是不是做错了?我有什么东西不见了吗?似乎Arangodb并不是每次都坚持Foxx数据。

    2 回复  |  直到 7 年前
        1
  •  2
  •   skinneejoe    7 年前

    我可能找到了解决办法。我没有直接在撰写文件中使用公共的arangodb docker映像,而是改用docker file来构建自己的映像。

    之前:

    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文件中的copy指令就是关键所在。到目前为止,它工作得很好。如果继续这样下去,我几天后就接受这个答案。

    编辑: 不幸的是,这并没有100%地解决这个问题,尽管它已经改善了这个问题。所以我不会把这个作为答案,但这是一个有用的步骤。

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

        2
  •  1
  •   skinneejoe    7 年前

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

    在对arango使用绑定进行了大量测试之后,arango设置其foxx服务目录的方式似乎与docker创建绑定的方式存在冲突。如果Docker有办法延迟绑定的创建,直到Arango启动并配置了它的FoxX服务之后,事情可能会好起来。但似乎存在冲突,通常Dockers绑定会破坏Foxx服务。在许多情况下,来自一个服务的源文件找到了进入另一个服务的方法。很奇怪。

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

    我很想看到Arango用他们的FoxX服务更全面地支持Docker,但与此同时,这个解决方案似乎可以很好地满足我的需求。

    推荐文章