#node.js #docker #npm
Вопрос:
У меня есть Node.js приложение, которое отлично работает внутри контейнера Docker в среде Linux, и теперь мне нужно запустить его на своей машине Windonws. Но у меня возникла проблема с Argon2, которая продолжает возвращать ошибку, и я попробовал несколько способов ее решения.
Ниже приведена ошибка, которая продолжает возвращаться.
[2:29:32 PM] Starting compilation in watch mode...
application |
application | [2:31:27 PM] Found 0 errors. Watching for file changes.
application |
application | internal/modules/cjs/loader.js:1131
application | return process.dlopen(module, path.toNamespacedPath(filename));
application | ^
application |
application | Error: Error loading shared library /usr/src/app/node_modules/argon2/lib/binding/napi-v3/argon2.node: Exec format error
application | at Object.Module._extensions..node (internal/modules/cjs/loader.js:1131:18)
application | at Module.load (internal/modules/cjs/loader.js:937:32)
application | at Function.Module._load (internal/modules/cjs/loader.js:778:12)
application | at Module.require (internal/modules/cjs/loader.js:961:19)
application | at require (internal/modules/cjs/helpers.js:92:18)
application | at Object.<anonymous> (/usr/src/app/node_modules/argon2/argon2.js:9:56)
application | at Module._compile (internal/modules/cjs/loader.js:1072:14)
application | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
application | at Module.load (internal/modules/cjs/loader.js:937:32)
application | at Function.Module._load (internal/modules/cjs/loader.js:778:12)
У меня есть файл .dockerignore, который выглядит так.
.git
docker-compose.yml
.env.example
.gitlab-ci.yml
Makefile
.vscode
tmp
_Production
# Log files
npm-debug.log*
# Dependency directories
node_modules
/node_modules
npm-debug.log
# Coverage files
coverage
.nyc_output
# Documentation files
/docs
README.md
Insomnia
.scannerwork
Докерфайл
FROM node:14-alpine as development
WORKDIR /usr/src/app
COPY package*.json ./
COPY . .
RUN npm install -g @nestjs/cli amp;amp; npm install
RUN npm run build
FROM node:14-alpine as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY --from=development /usr/src/app/package*.json ./
COPY --from=development /usr/src/app/dist ./dist
RUN npm ci
CMD ["node", "dist/main"]
Dockerfile.prod
FROM node:14-alpine as development
WORKDIR /usr/src/app
COPY package*.json ./
COPY . .
RUN npm install -g @nestjs/cli amp;amp; npm install
RUN npm run build
FROM node:14-alpine as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY --from=development /usr/src/app/package*.json ./
COPY --from=development /usr/src/app/dist ./dist
RUN npm ci
CMD ["node", "dist/main"]
докер-compose.yml
version: '3.7'
services:
application:
container_name: application
build:
context: .
target: development
volumes:
- .:/usr/src/app
ports:
- ${APP_PORT}:${APP_PORT}
# - 9229:9229
command: npm run start:dev
env_file:
- .env
depends_on:
- database
database:
image: mysql:5.7
container_name: database
command:
[
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
]
environment:
- MYSQL_DATABASE=${DB_DATABASE}
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
ports:
- 33306:3306
volumes:
- database-data:/var/lib/mysql
volumes:
database-data:
driver: 'local'
networks:
default:
external:
name: dev
Комментарии:
1. Вы используете контейнер docker в Windows? Или пытаетесь запустить код изначально в Windows? Эта ошибка обычно связана с узловым модулем с собственным (скомпилированным) кодом, созданным на платформе <A> (скажем, Linux), а затем скопированным на платформу <A><B> (Windows) и т. Д. и т. Д. Вам нужно создать node_модули на целевой платформе, на которой вы собираетесь работать.