带有节点 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 add
ed 的 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.lock
或 package-lock.json
中选择你最不喜欢的)从你的项目中删除并且在 yarn
和 npm
)
之间始终只使用一种包管理器
我的 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 add
ed 的 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.lock
或 package-lock.json
中选择你最不喜欢的)从你的项目中删除并且在 yarn
和 npm
)