Арангодб, Фокс и Докер с объемом

Я использую 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

Наконец, я создал монтирование привязки из исходной папки Foxx к папке приложения Foxx в моем контейнере ArangoDB:

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

Примерно 40-50% времени, когда я сочиняю свой исходный код Foxx, удаляется. Я пытался использовать опцию "без копирования" на томе Foxx, но это только ухудшает ситуацию.

После того, как мои контейнеры скомпоновали скрипт узла в моем внешнем контейнере, я попытаюсь установить мой сервис Foxx и установить его в режим разработки. По сути, он архивирует мой источник Foxx на лету и устанавливает его. Но он часто находит мою исходную папку Foxx пустой и дает сбой, и в этот момент я восстанавливаю файлы, а затем создаю, затем делаю резервную копию и пытаюсь снова.

Я иду по этому поводу неправильно? Я что-то упускаю? Кажется, что ArangoDB не сохраняет данные Foxx каждый раз.

2 ответа

Решение

Возможно, я нашел решение. Вместо того, чтобы использовать общедоступный образ докера ArangoDB непосредственно в моем файле компоновки, я переключился на создание своего собственного с использованием файла докерства.

До:

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. Вместо того, чтобы создавать один большой извилистый ответ, я решил опубликовать отдельный ответ, чтобы сделать вещи более ясными.

После большого тестирования с использованием привязок с Arango кажется, что способ, которым Arango настраивает свой каталог сервисов Foxx, вступает в конфликт с тем, как Docker создает свои привязки. Возможно, если бы у Docker был способ отложить создание привязки до тех пор, пока Arango не загрузится и не настроит свои сервисы Foxx, все может работать. Но кажется, что есть конфликт, и часто привязки Dockers повреждают сервисы Foxx. Во многих случаях исходные файлы из одного сервиса попадают в другой сервис. Очень странно.

Поэтому я решил вообще отказаться от использования привязок для разработки. Вместо этого я создал скрипт, который использует драйвер ArangoJS и библиотеку NPM под названием chokidar. Этот скрипт следит за моим исходным каталогом foxx и каждый раз, когда сохраняется изменение, он заменяет сервис foxx через HTTP с использованием драйвера ArangoJS. Я думал, что это может быть неэффективно, но на самом деле это очень быстро и эффективно, и это обходит все проблемы, которые у меня возникают с Docker.

Я бы хотел, чтобы Arango более полно поддержал Docker в своих сервисах Foxx, но пока что это решение, похоже, очень хорошо подходит для моих нужд.

Другие вопросы по тегам