cha*_*hai 3 node.js docker reactjs webpack
我已经注册了 docker 课程,并且讲师提供了一个带有一些相当旧的 React 代码的入门项目。
\n我对 React 项目进行了 docker 化,这是简单的 Dockerfile:
\nFROM node\n\nWORKDIR /app\n\nCOPY package.json .\n\nRUN npm i\n\nCOPY . .\n\nEXPOSE 3000\n\nCMD ["npm", "start"]\nRun Code Online (Sandbox Code Playgroud)\n然后我构建了图像:
\ndocker build -t goals-react .\nRun Code Online (Sandbox Code Playgroud)\n并以附加模式运行容器:
\ndocker run --name goals-app --rm -p 3000:3000 goals-react\nRun Code Online (Sandbox Code Playgroud)\n这是我收到的输出:
\n> frontend@0.1.0 start\n> react-scripts start\n\n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: Project is running at http://172.17.0.4/\n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: webpack output is served from\n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: Content not from webpack is served from /app/public\n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: 404s will fallback to /\n\nStarting the development server...\n\nError: error:0308010C:digital envelope routines::unsupported\n at new Hash (node:internal/crypto/hash:67:19) \n at Object.createHash (node:crypto:130:10)\n at module.exports (/app/node_modules/webpack/lib/util/createHash.js:135:53)\n at NormalModule._initBuildHash (/app/node_modules/webpack/lib/NormalModule.js:417:16)\n at handleParseError (/app/node_modules/webpack/lib/NormalModule.js:471:10)\n at /app/node_modules/webpack/lib/NormalModule.js:503:5\n at /app/node_modules/webpack/lib/NormalModule.js:358:12\n at /app/node_modules/loader-runner/lib/LoaderRunner.js:373:3\n at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:214:10)\n at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:221:10)\n/app/node_modules/react-scripts/scripts/start.js:19\n throw err;\n ^\n\nError: error:0308010C:digital envelope routines::unsupported\n at new Hash (node:internal/crypto/hash:67:19) \n at Object.createHash (node:crypto:130:10)\n at module.exports (/app/node_modules/webpack/lib/util/createHash.js:135:53)\n at NormalModule._initBuildHash (/app/node_modules/webpack/lib/NormalModule.js:417:16)\n at /app/node_modules/webpack/lib/NormalModule.js:452:10\n at /app/node_modules/webpack/lib/NormalModule.js:323:13\n at /app/node_modules/loader-runner/lib/LoaderRunner.js:367:11\n at /app/node_modules/loader-runner/lib/LoaderRunner.js:233:18\n at context.callback (/app/node_modules/loader-runner/lib/LoaderRunner.js:111:13)\n at /app/node_modules/babel-loader/lib/index.js:59:103 {\n opensslErrorStack: [ \'error:03000086:digital envelope routines::initialization error\' ],\n library: \'digital envelope routines\',\n reason: \'unsupported\',\n code: \'ERR_OSSL_EVP_UNSUPPORTED\'\n}\n\nNode.js v17.1.0\nRun Code Online (Sandbox Code Playgroud)\n我认为这是因为react项目使用的是旧版本的react,所以我使用以下命令升级了package.json文件:
\nnpx npm-check-updates -u\nnpm install\nRun Code Online (Sandbox Code Playgroud)\n然后我删除并重新创建图像,然后运行一个新容器:
\ndocker rmi goals-react\ndocker build -t goals-react .\ndocker run --name goals-app --rm -p 3000:3000 goals-react\nRun Code Online (Sandbox Code Playgroud)\n但令我惊讶的是我收到了同样的错误。所以我用谷歌搜索digital envelope routines::unsupported,发现了另一个stackoverflow 讨论。
我执行了以下命令:
\nexport NODE_OPTIONS=--openssl-legacy-provider\nRun Code Online (Sandbox Code Playgroud)\n然后我重建了镜像并重新启动了容器,但没有效果。我决定更彻底地阅读错误消息,这似乎是一个 webpack 错误。我访问了 webpack github 页面,我意识到其他人也有同样的问题,就在这里,但是该问题已关闭。他们还推荐了上述命令,但这显然对我不起作用。
\n预先感谢您的任何反馈和帮助。
\n编辑:
\n根据 @MikiBelavista 的要求,这里是 package.json 文件:
\nFROM node\n\nWORKDIR /app\n\nCOPY package.json .\n\nRUN npm i\n\nCOPY . .\n\nEXPOSE 3000\n\nCMD ["npm", "start"]\nRun Code Online (Sandbox Code Playgroud)\n
改变你的线路
"start": "react-scripts start",
Run Code Online (Sandbox Code Playgroud)
到
"start": "react-scripts --openssl-legacy-provider start"
Run Code Online (Sandbox Code Playgroud)
但请注意,OpenSSL 实现的算法已被视为遗留算法。更多OpenSSL