错误:错误:0308010C:数字信封例程::新哈希不受支持(节点:内部/加密/哈希:71:19)

Yus*_*suf 35 version envelope node.js docker

构建我的 React docker 映像后,我尝试运行docker run image_name ,之后日志抛出此错误

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/app/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/app/node_modules/webpack/lib/NormalModule.js:417:16)
    at /app/node_modules/webpack/lib/NormalModule.js:452:10
    at /app/node_modules/webpack/lib/NormalModule.js:323:13
    at /app/node_modules/loader-runner/lib/LoaderRunner.js:367:11
    at /app/node_modules/loader-runner/lib/LoaderRunner.js:233:18
    at context.callback (/app/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
    at /app/node_modules/babel-loader/lib/index.js:59:103 {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Run Code Online (Sandbox Code Playgroud)

我的docker文件如下

FROM node:18-alpine
EXPOSE 3000
WORKDIR /app
COPY ./frontend/package.json .
RUN npm install
COPY ./frontend .
COPY ./images .
CMD ["npm", "start"]

Run Code Online (Sandbox Code Playgroud)

我预计这可能是节点版本问题,但我不太确定该错误,有人能解释一下这个错误是什么以及我该如何解决吗?谢谢

dav*_*ell 27

Node.js v17 迁移到 OpenSSL v3.0

您可以尝试切换到 v16,或ENV NODE_OPTIONS="--openssl-legacy-provider"在 Dockerfile 中进行设置,或更新start脚本以package.json供使用react-scripts --openssl-legacy-provider start(或类似的操作,具体取决于您的特定启动脚本)。

您可以在此处关注一个问题:https ://github.com/facebook/create-react-app/issues/11708

  • 我得到:`电子:NODE_OPTIONS 中不允许 --openssl-legacy-provider` (3认同)
  • “start”:“react-scripts --openssl-legacy-provider start”,这为我完成了。 (2认同)

小智 18

开始您申请:

更新您的启动脚本以package.json使用

react-scripts --openssl-legacy-provider start
Run Code Online (Sandbox Code Playgroud)

构建您的应用程序:

更新您的构建脚本以package.json使用

react-scripts --openssl-legacy-provider build
Run Code Online (Sandbox Code Playgroud)


mar*_*der 12

我在 Heroku 上也遇到了同样的问题。在构建阶段,我遇到了同样的错误。为了解决这个问题,我只需设置为环境变量:

NODE_OPTIONS="--openssl-legacy-provider"
Run Code Online (Sandbox Code Playgroud)


Yus*_*suf 0

我更改了节点版本node:16.3.0-alpine并且它有效,但是任何人都可以解释digital envelope routines