20

after building my react docker image I tried to run docker run image_name and after that the log throw this error

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'
}

my docker file is as follows

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

I am expecting this might be a node version issue, but I am not quite sure about the error, can anybody explain what this error is about and how I can resolve? thanks

Yusuf
  • 2,295
  • 7
  • 15
  • 34
  • Does this answer your question? [Error message "error:0308010C:digital envelope routines::unsupported"](https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported) – Michael Freidgeim Nov 08 '22 at 06:28
  • as an environment variable NODE_OPTIONS=--openssl-legacy-provider works for me... – J Decker Nov 13 '22 at 01:13

8 Answers8

22

Node.js v17 moved to OpenSSL v3.0.

You could try switching to v16, or set ENV NODE_OPTIONS="--openssl-legacy-provider" in your Dockerfile, or update your start script in package.json to use react-scripts --openssl-legacy-provider start (or similar depending on your specific start script).

There is an issue you can follow here: https://github.com/facebook/create-react-app/issues/11708

davecardwell
  • 3,380
  • 1
  • 17
  • 15
9

To start your application:

update your start script in package.json to use

react-scripts --openssl-legacy-provider start

To build your application:

update your build script in package.json to use

react-scripts --openssl-legacy-provider build
Aziza Kasenova
  • 1,501
  • 2
  • 10
  • 22
ravi Verma
  • 91
  • 1
  • 1
3

After a deep search I come up with this solution.

What was the issue? The issue was the difference between my Node Version and React js version.

Node.js v18.4.0
"react":"^16.12.0"

Solution:

  1. Make Sure that you have nvm installed in you machine if you don't here is the link Node Version Manager
  2. In your Project terminal type: nvm ls (You should see a list as showed below ) nvm ls
  3. Type : nvm use v16.15.1 choose a version that fits you

If you don't have any nvm installed

Note: After install nvm You MUST RESTART THE TERMINAL OR CLOSE AND OPEN in order to see nvm version

Dharman
  • 30,962
  • 25
  • 85
  • 135
2

I had the same problem on Heroku. During the build phase, I got the same error. To solve it, I just had to set as an environment variable:

NODE_OPTIONS="--openssl-legacy-provider"
marcvander
  • 479
  • 4
  • 17
1

This error happened to me after installing the latest Node version/18.15 on my machine while using angular v 12.2.14. So, I was supposed to uninstall the latest node and downgrade it to an older version/v14.21.3 which is compatible with the angular version. Used : https://unpkg.com/browse/@angular/core@12.0.0/package.json for compatibility check.

Naod Agere
  • 39
  • 1
  • 6
  • Similar issue here: So my global Angular projects (CLI 14 & 15) & the entire machine use Node V18, and the project causing this error is written in Angular CLI V11. Do you think downgrading my entire global Node to say V16 is any better idea? Maybe upgrade this project's Node or sth? – Jacob Okello Okomo Jun 26 '23 at 12:24
  • @JacobOkelloOkomo, Make sure there are no other projects using the global version and also check the compatibility link first. – Naod Agere Jul 02 '23 at 02:14
0

I changed node version node:16.3.0-alpine and it worked however can any body explain digital envelope routines please

Yusuf
  • 2,295
  • 7
  • 15
  • 34
-1

Check package.json, under the script I have,

"scripts": { "start": "expo start", "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web" }

in terminal run

expo start -web

-2

Cause

Before Node 17.x versions, It uses OpenSSL 2 version. NodeJS uses OpenSSL for hash functionality code. The OpenSSL 3 disables MD4, Due to that nodejs is broken in the latest nodejs versions.

Solution

  1. Linux users

export NODE_OPTIONS=--openssl-legacy-provider

  1. Windows users

set NODE_OPTIONS=--openssl-legacy-provider

  1. You can add NODE_OPTIONS=--openssl-legacy-provider to npm scripts.
Fred Ondieki
  • 2,314
  • 25
  • 23