Argon2 с док-контейнером Node.js

У меня есть приложение NestJs, которое отлично работает на моей локальной машине (Windows). Теперь я хотел бы создать контейнер докеров для своего приложения. Когда я пытаюсь запустить свой контейнер, у меня возникает одна проблема с Argon2. Я устанавливаю на контейнер весь необходимый аргон. где моя ошибка?

Благодарить

internal/modules/cjs/loader.js:1025
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: Error loading shared library /usr/src/app/node_modules/argon2/build/Release/argon2.node: Exec format error
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:1025:18)
    at Module.load (internal/modules/cjs/loader.js:815:32)
    at Function.Module._load (internal/modules/cjs/loader.js:727:14)
    at Module.require (internal/modules/cjs/loader.js:852:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at load (/usr/src/app/node_modules/node-gyp-build/index.js:20:10)
    at Object.<anonymous> (/usr/src/app/node_modules/argon2/argon2.js:5:81)
    at Module._compile (internal/modules/cjs/loader.js:959:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
    at Module.load (internal/modules/cjs/loader.js:815:32)

Докерфайл:

FROM node:12.13-alpine As development

WORKDIR /usr/src/app

COPY package*.json ./

# --no-cache: download package index on-the-fly, no need to cleanup afterwards
# --virtual: bundle packages, remove whole bundle at once, when done
RUN apk --no-cache --virtual build-dependencies add \
    python \
    make \
    g++ \
    && npm install \
    && apk del build-dependencies
RUN npm install -g node-gyp
RUN npm install argon2
RUN npm install --only=development

COPY . .

RUN npm run build

FROM node:12.13-alpine as production

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /usr/src/app

COPY package*.json ./

# --no-cache: download package index on-the-fly, no need to cleanup afterwards
# --virtual: bundle packages, remove whole bundle at once, when done
RUN apk --no-cache --virtual build-dependencies add \
    python \
    make \
    g++ \
    && npm install \
    && apk del build-dependencies
RUN npm install -g node-gyp
RUN npm install argon2
RUN npm install --only=production

COPY . .

COPY --from=development /usr/src/app/dist ./dist

CMD ["node", "dist/main"]

докер-составить:

version: "3.7"

services:
  main:
    container_name: NestApp
    build:
      context: .
      target: development
    volumes:
      - .:/usr/src/app
      #- /usr/src/app/node_modules
    ports:
      - 3001:3001
    command: npm run start:dev
    networks:
      - webnet
    depends_on:
      - mysql
  mysql:
    image: mysql:5
    restart: always
    networks:
      - webnet
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: bdd
    ports:
      - "3306:3306"
    volumes:
      - my-db:/var/lib/mysql
  adminer:
    image: adminer
    restart: always
    ports:
      - 8085:8080
    networks:
      - webnet
networks:
  webnet:
    driver: bridge
# Names our volume
volumes:
  my-db:


person Ralentix    schedule 03.03.2020    source источник
comment
У вас есть файл .dockerignore, который игнорирует ваш каталог node_modules?   -  person Jay McDoniel    schedule 03.03.2020
comment
Спасибо, это решило мою проблему   -  person Ralentix    schedule 03.03.2020


Ответы (2)


Отвечаю для потомков:

Похоже, у вас нет файла .dockerignore, поэтому, когда вы COPY . ., вы извлекаете папку node_modules с вашего локального компьютера (Windows) и пытаетесь запустить ее в Docker (Alpine Linux), поэтому, пока вы правильно запускаете npm install argon2 в контексте Docker, вы перезаписываете это когда вы копируете из локального в Docker. Если вы создаете файл .dockerignore, добавьте к нему /node_modules, чтобы не перемещать каталог node_modules

person Jay McDoniel    schedule 03.03.2020

У меня также была эта проблема. Я воспользовался приведенным выше советом Джея Макдониела. Хотя для меня у меня также была другая проблема, которая, похоже, выдавала ту же ошибку. Проблема для меня заключалась в том, что я случайно npm installed что-то в своем проекте при использовании проекта пряжи, где я должен был yarn added это дало предупреждение, в котором говорилось:

warning package-lock.json found. Your project contains lock files generated by    
tools other than Yarn. It is advised not to mix package managers in order to avoid 
resolution inconsistencies caused by unsynchronized lock files. To clear this. 
warning, remove package-lock.json.

Проблема еще не была исправлена, пока я не удалил package-lock.json (извлеченный урок: выберите наименее любимый из двух файлов блокировки (yarn.lock или package-lock.json), чтобы удалить из вашего проекта, и всегда используйте только один тип менеджера пакетов между yarn и npm)

person John    schedule 10.12.2020