带有节点 docker 容器的 Argon2

Argon2 with node docker container

我的 NestJs 应用程序在我的本地机器上运行良好 (windows)。 现在我想为我的应用程序创建一个 docker 容器。 当我尝试启动我的容器时,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)

Docker 文件:

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"]

docker-撰写:

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:

为子孙后代回答:

听起来您没有 .dockerignore 文件,所以当您 COPY . . 时,您正在从本地计算机 (Windows) 拉取 node_modules 文件夹并尝试 运行 它在 Docker (Alpine Linux) 中,因此当您在 Docker 上下文中正确地 运行 npm install argon2 时,当您从Docker 本地。如果您创建一个 .dockerignore 文件,请向其中添加 /node_modules,这样您就不会移动 node_modules 目录

我也遇到了这个问题,我按照 Jay McDoniel 的上述提示做了。尽管对我来说我还有另一个问题似乎引发了同样的错误。我的问题是我不小心 npm install 在我的项目中编辑了一些东西,同时使用了一个我应该 yarn added 的 yarn 项目,这给出了一个警告说:

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.lockpackage-lock.json 中选择你最不喜欢的)从你的项目中删除并且在 yarnnpm)

之间始终只使用一种包管理器