Nodejs环境下react搭docker入门准备 遇到node17和openssl问题

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs环境下react搭docker入门准备 遇到node17和openssl问题

macos


Error: error:0308010C:digital envelope routines::unsupported
   ...
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

尝试过以下方法都解决不了

"scripts": {
    "start": "export SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts start",
    "build": "export SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts build"
}

或者

"scripts": {
    "start": "react-scripts --openssl-legacy-provider start",
    "build": "react-scripts --openssl-legacy-provider build",
}

build 后报错,npm start 正常,也尝试过把 node 降级到 16.13.0, brew unlink 和删除高版本,build 后看 docker logs 还是一样明示 Node.js v17.9.0

请问如果要高版本和低版本正确的应该怎么处理? 谢谢!


9 回复

react 搭 docker 环境?
我理解下:
1.使用 docker 搭建 react 远程开发环境?
2.构建 react 工程的镜像?

使用的 docker 版本?
openssl 安装了吗?
是不是使用的源有问题?


针对问题:
根据你需要的版本,选择对应的 tag 的镜像


感谢回复, 我需要构建 react 工程的镜像 我想在本地开发然后直接打包成镜像, docker V4.7, 没有装 openssl, 源没有改动.

我上了 node16 就一堆问题,又退回 14 了

Google 搜一下你的错误信息,就能搜到结局方案。

比如看一下这个 https://github.com/ant-design/ant-design-pro/issues/9272#issuecomment-1086828874

或者国内站点看一下 Node v17 的更新 https://developer.51cto.com/article/687259.html

生产项目建议用 LTS ,除非你对项目的代码、依赖的细节非常了解,像 React 这种稍微复杂一些且应用广泛的依赖最好还是用 LTS 。

Dockerfile 不贴一下吗?


不好意思, 我不太清楚需要提供什么信息, 下面是 dockerfile
<br>FROM node<br>WORKDIR /app<br>COPY package.json . <br>RUN npm install<br>COPY . .<br>EXPOSE 3000<br>CMD ["npm", "start"]<br>

虽然单 COPY 一个 package.json 进去安装,装好了再把其它东西 COPY 进去有一点奇怪,不过看不出来有什么错误。你可以确认一下 Docker 外你本地是否有 node_modules ,不排除你在 npm install 之后又把容器外的 node_modules 给 COPY 进去覆盖掉了,导致 node 的平台依赖不一致。

说一下我解决的方法, 安装 n 把所有的 node 都删了用 n 重装, 这里可能是我有误解的,build image 还是显示 17.9, 问题在于写 dockerfile 的时候拿的镜像是最新,在 dockerfile FROM node:指定版本就解决了.

另外我请教各位分享一下大家平台开发的是怎样的流程, 先在本地开发测试好再打包放 docker 运行还是直接远程 docker 开发或者其它方式?

在Node.js环境下使用React并尝试将其容器化(Docker化)时,遇到Node.js 17与OpenSSL的问题是比较常见的。这通常是由于Node.js与系统中安装的OpenSSL库版本不兼容所导致的。以下是一些解决步骤,可以帮助你入门准备:

  1. 使用Dockerfile指定Node.js版本: 你可以通过Dockerfile来指定一个兼容的Node.js版本和相关的依赖。例如,使用官方的Node.js Docker镜像:

    # 使用Node.js 17的官方镜像
    FROM node:17
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制package.json和package-lock.json(如果有)
    COPY package*.json ./
    
    # 安装依赖
    RUN npm install
    
    # 复制项目文件
    COPY . .
    
    # 暴露端口(如果你的React应用需要服务器)
    EXPOSE 3000
    
    # 运行应用
    CMD ["npm", "start"]
    
  2. 忽略系统级OpenSSL: 由于Node.js通常会自带OpenSSL,你可以尝试忽略系统级别的OpenSSL库,直接使用Node.js自带的。这通常在使用官方镜像时自动处理。

  3. 构建和运行Docker镜像: 构建Docker镜像并运行:

    docker build -t my-react-app .
    docker run -p 3000:3000 my-react-app
    

通过上述步骤,你应该能够绕过Node.js 17与OpenSSL的兼容性问题,并在Docker中成功运行你的React应用。如果问题仍然存在,可能需要检查Node.js的官方文档或Docker Hub上的相关镜像说明。

回到顶部