简体   繁体   English

将 bcrypt 添加到 package.json 时,如何使用 docker 节点高山图像解决“无法找到要使用的任何 Python 安装”?

[英]How to solve "Could not find any Python installation to use" with docker node alpine Image when adding bcrypt to package.json?

Before I added bcrypt to my package.json, everything was working fine.在我将 bcrypt 添加到我的 package.json 之前,一切正常。 Now, I get the error message below.现在,我收到以下错误消息。

This is an excerpt of my package.json:这是我的 package.json 的摘录:

  "dependencies": {
    "bcrypt": "3.0.6",
    "express": "^4.17.1",
    "mongodb": "^3.3.1",
    "nodemailer": "^6.3.0",
    "pm2": "^3.5.1",
    "redis": "^2.8.0",
    "xlsx": "^0.15.0"
  },

This is my dockerfile. I am using the offical node alpine image.这是我的 dockerfile。我使用的是官方节点 alpine 图像。 I wonder if alpine has phyton already installed.我想知道 alpine 是否已经安装了 phyton。

FROM node:13.5.0-alpine

WORKDIR /usr/app

COPY ./src .

RUN npm install

I get this error message when I run docker-compose:我在运行 docker-compose 时收到此错误消息:

node-pre-gyp WARN Using request for node-pre-gyp https download
node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.6/bcrypt_lib-v3.0.6-node-v79-linux-x64-musl.tar.gz
node-pre-gyp WARN Pre-built binaries not found for bcrypt@3.0.6 and node@13.5.0 (node-v79 ABI, musl) (falling back to source compile with node-gyp)
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python checking if "python3" can be used
gyp ERR! find Python - "python3" is not in PATH or produced an error
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "/path/to/pythonexecutable"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python

gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:307:47)
gyp ERR! stack     at PythonFinder.runChecks (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:136:21)
gyp ERR! stack     at PythonFinder.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:179:16)
gyp ERR! stack     at PythonFinder.execFileCallback (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:271:16)
gyp ERR! stack     at exithandler (child_process.js:309:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:321:5)
gyp ERR! stack     at ChildProcess.emit (events.js:305:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:469:16)
gyp ERR! stack     at processTicksAndRejections (internal/process/task_queues.js:84:21)
gyp ERR! System Linux 4.15.0-47-generic
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/usr/app/node_modules/bcrypt/lib/binding/bcrypt_lib.node" "--module_name=bcrypt_lib" "--module_path=/usr/app/node_modules/bcrypt/lib/binding" "--napi_version=5" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v79"
gyp ERR! cwd /usr/app/node_modules/bcrypt
gyp ERR! node -v v13.5.0
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute '/usr/local/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/usr/app/node_modules/bcrypt/lib/binding/bcrypt_lib.node --module_name=bcrypt_lib --module_path=/usr/app/node_modules/bcrypt/lib/binding --napi_version=5 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v79' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/usr/app/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:305:20)
node-pre-gyp ERR! stack     at maybeClose (internal/child_process.js:1028:16)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
node-pre-gyp ERR! System Linux 4.15.0-47-generic
node-pre-gyp ERR! command "/usr/local/bin/node" "/usr/app/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /usr/app/node_modules/bcrypt
node-pre-gyp ERR! node -v v13.5.0
node-pre-gyp ERR! node-pre-gyp -v v0.12.0
node-pre-gyp ERR! not ok
Failed to execute '/usr/local/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/usr/app/node_modules/bcrypt/lib/binding/bcrypt_lib.node --module_name=bcrypt_lib --module_path=/usr/app/node_modules/bcrypt/lib/binding --napi_version=5 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v79' (1)
npm WARN testapp@0.0.1 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.11 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.11: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! bcrypt@3.0.6 install: `node-pre-gyp install --fallback-to-build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the bcrypt@3.0.6 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-12-24T14_22_05_060Z-debug.log
ERROR: Service 'web' failed to build: The command '/bin/sh -c npm install' returned a non-zero code: 1

How can I solve this issue?我该如何解决这个问题? Do I have to install phyton on alpine or just add the env variable?我必须在 alpine 上安装 phyton 还是只添加 env 变量? If so, please tell me how.如果是这样,请告诉我如何。 I have already searched for solutions but no one worked...我已经在寻找解决方案,但没有人工作......

Open Powershell with administrator privileges and run this command, then proceed with bcrypt installation以管理员权限打开Powershell并运行此命令,然后继续进行bcrypt安装

Windows: npm install --global --production windows-build-tools Windows: npm install --global --production windows-build-tools

Linux Alpine is very minimalist image. Linux Alpine 是非常简约的图像。 If performance is not a restriction, you may want to consider using the official node image that has all the dependencies you need and just worry about development: https://github.com/nodejs/docker-node So, you can have a Dockerfile like this:如果性能不是限制,您可能需要考虑使用具有您需要的所有依赖项的官方节点映像,只需担心开发: https : //github.com/nodejs/docker-node所以,您可以拥有一个Dockerfile像这样:

FROM node:10
WORKDIR /usr/app
COPY ./src .
RUN npm install
EXPOSE 3000 # Use here the port you want to expose

Add this in you docker file before npm install:在 npm install 之前将其添加到您的 docker 文件中:

RUN apk add --update python make g++\
   && rm -rf /var/cache/apk/*

Compose file to run node server in Dockerfile撰写文件以在 Dockerfile 中运行节点服务器

 FROM node:16.8.0-alpine ENV SERVER_HOME=/usr/src/server/ WORKDIR $SERVER_HOME COPY./package*.json $SERVER_HOME RUN npm install -g npm@7.24.0 RUN apk add --update python3 make g++ && rm -rf /var/cache/apk/* RUN npm install COPY. $SERVER_HOME #EXPOSE 5000 CMD npm run build CMD npm run start

I faced an issue in installing the node module in the alpine image so python is not found in alpine so I run this with python3 RUN apk add --update python3 make g++ && rm -rf /var/cache/apk/* everything worked fine if you still face issue replace npm install with npm install --force我在高山图像中安装节点模块时遇到问题,所以在高山中找不到 python 所以我用 python3 RUN apk add --update python3 make g++ && rm -rf /var/cache/apk/* 一切正常如果您仍然遇到问题,请将 npm 安装替换为 npm 安装 --force

For the sake of completeness: I solved it.为了完整起见:我解决了它。

The solution was to replace the dependency "bcrypt" with "bcrypt js ".解决方案是将依赖项“bcrypt”替换为“bcrypt js ”。

With bcryptjs there are no errors.使用 bcryptjs 没有错误。 Neither with standard node docker images nor node alpine docker images.无论是标准节点 docker 镜像还是节点 alpine docker 镜像。

Correct solution for Alpine would be Alpine 的正确解决方案是

RUN apk add --no-cache python3 make g++

我只是通过从https://www.python.org/downloads/windows/下载和安装 python 解决了这个问题

The problem for me was with pg-native dependency using node-gyp incorrectly.对我来说问题是 pg-native 依赖错误地使用了 node-gyp。

Found the solution from this link - node-gyp failure pg-native从此链接找到解决方案 - node-gyp failure pg-native

Extract from the comment that helped:从帮助的评论中摘录:

A: Don't use two different db libraries by accident: ie pg and pg.js. A: 不要无意中使用两个不同的数据库库:即 pg 和 pg.js。

B: Be cautious using things like sequelize that you may have flagged the 'native' option in initializing your connection to the DB. B:谨慎使用诸如 sequelize 之类的东西,你可能在初始化与数据库的连接时标记了“本机”选项。 This will also often cause this error.这也经常会导致这个错误。

C: Lastly, I often remove the pg-native library entirely. C:最后,我经常完全删除 pg-native 库。 Causes strange errors that are not consistent with node-gyp.导致与 node-gyp 不一致的奇怪错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM