我參加了 docker 課程,講師提供了一個帶有一些相當舊的 React 代碼的入門專案。
我對 react 專案進行了 dockerized,這是簡單的 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,所以我使用以下命令升級了 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 討論。
我執行了以下命令:
export NODE_OPTIONS=--openssl-legacy-provider
然后我重建了映像并重新啟動了容器,但無濟于事。我決定更徹底地閱讀錯誤訊息,它似乎是一個 webpack 錯誤。我去了 webpack github 頁面,我意識到其他人也有同樣的問題,就在這里,但是問題已經關閉。他們還推薦了上述命令,但這顯然對我不起作用。
在此先感謝您的任何反饋和幫助。
編輯:
根據@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"
]
}
}
uj5u.com熱心網友回復:
改變你的線路
"start": "react-scripts start",
到
"start": "react-scripts --openssl-legacy-provider start"
但請注意,已被視為遺留演算法的 OpenSSL 實作。更多OpenSSL
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367497.html
