Argon2 与节点 docker 容器
Posted
技术标签:
【中文标题】Argon2 与节点 docker 容器【英文标题】:Argon2 with node docker container 【发布时间】:2020-06-16 01:48:45 【问题描述】:我的 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:
【问题讨论】:
您是否有忽略您的node_modules
目录的.dockerignore
文件?
谢谢,解决了我的问题
【参考方案1】:
我也遇到了这个问题,我做了 Jay McDoniel 的上述提示。尽管对我来说,我也遇到了另一个似乎引发了同样错误的问题。对我来说,问题是我不小心在我的项目中npm install
ed 了一些东西,同时使用了一个我应该有yarn add
ed 的纱线项目,这给出了一个警告:
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
之间使用的经理)
【讨论】:
【参考方案2】:为后代着想回答:
听起来您没有.dockerignore
文件,所以当您使用COPY . .
时,您正在从本地机器(Windows)拉取node_modules
文件夹并尝试在Docker(Alpine Linux)中运行它,所以当您正确的时候在 Docker 上下文中运行 npm install argon2
,当您从本地复制到 Docker 时会覆盖它。如果您创建一个.dockerignore
文件,请将/node_modules
添加到其中,这样您就不会移动node_modules
目录
【讨论】:
以上是关于Argon2 与节点 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章
docker compose 将 mongodb 容器与节点 js 容器连接起来