4

我的 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)

Dockerfile:

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:

4

2 回答 2

5

为后人回答:

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

于 2020-03-03T17:03:45.750 回答
0

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

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

于 2020-12-10T21:00:52.993 回答