【问题标题】:Error with docker and react, digital envelope routines::unsupported码头工人和反应错误,数字信封例程::不支持
【发布时间】:2022-01-02 12:48:07
【问题描述】:

我已经注册了一个 docker 课程,并且讲师提供了一个带有一些相当旧的反应代码的入门项目。

我对 react 项目进行了 docker 化,这是简单的 Dockerfile:

FROM node

WORKDIR /app

COPY package.json .

RUN npm i

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

然后我构建了图像:

docker build -t goals-react .

并以附加模式运行容器:

docker run --name goals-app --rm -p 3000:3000 goals-react

这是我收到的输出:

> frontend@0.1.0 start
> react-scripts start

ℹ 「wds」: Project is running at http://172.17.0.4/
ℹ 「wds」: webpack output is served from
ℹ 「wds」: Content not from webpack is served from /app/public
ℹ 「wds」: 404s will fallback to /

Starting the development server...

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)      
    at Object.createHash (node:crypto:130: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 handleParseError (/app/node_modules/webpack/lib/NormalModule.js:471:10)
    at /app/node_modules/webpack/lib/NormalModule.js:503:5
    at /app/node_modules/webpack/lib/NormalModule.js:358:12
    at /app/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
/app/node_modules/react-scripts/scripts/start.js:19
  throw err;
  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)      
    at Object.createHash (node:crypto:130: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'
}

Node.js v17.1.0

我认为是因为 react 项目使用的是旧版本的 react,所以我使用以下命令 upgraded the package.json 文件:

npx npm-check-updates -u
npm install

然后我删除并重新创建了图像,然后运行了一个新容器:

docker rmi goals-react
docker build -t goals-react .
docker run --name goals-app --rm -p 3000:3000 goals-react

但令我惊讶的是,我收到了同样的错误。所以我用谷歌搜索了digital envelope routines::unsupported,我发现了另一个stackoverflow discussion

我执行了以下命令:

export NODE_OPTIONS=--openssl-legacy-provider

然后我重建了映像并重新启动了容器,但无济于事。我决定更彻底地阅读错误消息,这似乎是一个 webpack 错误。我去了 webpack github 页面,我意识到其他人也有同样的问题,right here,但是问题已经解决了。他们还推荐了上面的命令,但这显然对我不起作用。

提前感谢您的任何反馈和帮助。

编辑

根据@MikiBelavista 的要求,这里是 package.json 文件:

{
  "name": "frontend",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.15.1",
    "@testing-library/react": "^12.1.2",
    "@testing-library/user-event": "^13.5.0",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "4.0.3"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

【问题讨论】:

  • 向我们展示你的 package.json。
  • 当然@MikiBelavista

标签: node.js reactjs docker webpack


【解决方案1】:

换行

"start": "react-scripts start",

"start": "react-scripts --openssl-legacy-provider start"

但请注意,已被视为遗留算法的 OpenSSL 实现。更多OpenSSl

【讨论】:

    【解决方案2】:

    更新 package.json "start" 脚本为:

    "start": "react-scripts --openssl-legacy-provider start"
    

    确保你重建了 docker 镜像,否则你会得到同样的错误。

    docker build --pull --rm -f "Dockerfile" -t yourappname:latest "."
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 2021-12-10
      • 2023-03-12
      • 2021-12-11
      • 2021-12-08
      • 1970-01-01
      • 2022-06-22
      • 2022-09-30
      相关资源
      最近更新 更多