Модули Node.js с собственными зависимостями должны быть скомпилированы для той же архитектуры платформы, что и серверная среда выполнения.Если вы связываете каталог node_modules
с локального компьютера разработки, он, вероятно, не будет совпадать.
Существует два подхода к использованию библиотек с нативными зависимостями ...
- Запустите
npm install
внутри контейнера Docker из образов платформы. - Создание настраиваемого образа времени выполнения с предварительно установленными библиотеками.
Первый подход наиболее прост, но может быть толькоиспользуется, когда zip-файл, содержащий все исходные файлы и библиотеки, меньше предела размера действия (48 МБ).
Запуск npm install
внутри контейнера времени выполнения
- Выполните следующеекоманда для привязки локального каталога к контейнеру времени выполнения и запуска
npm install
.
docker run -it -v $PWD:/nodejsAction openwhisk/action-nodejs-v10 "npm install"
Это оставит папку node_modules
с собственными зависимостями, скомпилированными для правильного времени выполнения.
- Архивирование исходных файлов действий, включая каталог
node_modules
.
zip -r action.zip *
- Создание нового действия с архивом действий.
ibmcloud wsk action create my-action --kind nodejs:10 action.zip
Создание пользовательского образа среды выполнения
- Создание
Dockerfile
с помощью команды npm install
, выполняемой во время сборки.
FROM openwhisk/action-nodejs-v10
RUN npm install fabric-network
- Сборка инажмите на изображение в Docker Hub.
$ docker build -t <USERNAME>/custom-runtime .
$ docker push <USERNAME>/custom-runtime
- Создайте новое действие, используя пользовательский образ времени выполнения.
ibmcloud wsk action create my-action --docker <USERNAME>/custom-runtime action.zip
Убедитесь, что node_modules
включенный в action.zip
не включает те же файлы библиотек.