如何在 Dockerfile 上构建纱线

Joã*_*ari 1 docker nuxt.js

我尝试构建一个执行代码的 Docker 映像:

\n

码头工人构建。-t <YOUR_DOCKER_HUB_USERNAME>/my-nuxt-project

\n

这是关于 nuxt.js 项目的,但是当我运行代码时,我收到以下错误:

\n
Step 5/13 : RUN yarn build\n ---> Running in 4dd3684952ba\nyarn run v1.22.19\n$ nuxt build\n\xe2\x84\xb9 Production build\n\xe2\x84\xb9 Bundling for server and client side\n\xe2\x84\xb9 Target: server\n\xe2\x84\xb9 Using components loader to optimize imports\n\xe2\x84\xb9 Discovered Components: .nuxt/components/readme.md\n\xe2\x9c\x94 Builder initialized\n\xe2\x9c\x94 Nuxt files generated\n\xe2\x84\xb9 Compiling Client\n\nnode:internal/crypto/hash:71\n  this[kHandle] = new _Hash(algorithm, xofLen);\n                  ^\n\nError: error:0308010C:digital envelope routines::unsupported\n    at new Hash (node:internal/crypto/hash:71:19)\n    at Object.createHash (node:crypto:133: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 Array.<anonymous> (/app/node_modules/loader-runner/lib/LoaderRunner.js:205:4)\n    at Storage.finished (/app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16)\n    at /app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9\n    at /app/node_modules/graceful-fs/graceful-fs.js:123:16\n    at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {\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 v18.12.0\nerror Command failed with exit code 1.\n
Run Code Online (Sandbox Code Playgroud)\n

这是我正在使用的 Dockerfile。我正在按照 nuxt 文档来构建图像。

\n
FROM node:lts as builder\n\nWORKDIR /app\n\nCOPY . .\n\nRUN yarn install \\\n  --prefer-offline \\\n  --frozen-lockfile \\\n  --non-interactive \\\n  --production=false\n\nRUN yarn build\n\nRUN rm -rf node_modules && \\\n  NODE_ENV=production yarn install \\\n  --prefer-offline \\\n  --pure-lockfile \\\n  --non-interactive \\\n  --production=true\n\nFROM node:lts\n\nWORKDIR /app\n\nCOPY --from=builder /app  .\n\nENV HOST 0.0.0.0\nEXPOSE 3000\n\nCMD [ "yarn", "start" ]\n
Run Code Online (Sandbox Code Playgroud)\n

有人知道如何调试吗?

\n

Dul*_*tne 6

尝试添加NODE_OPTIONS=--openssl-legacy-provider为 docker 环境变量。所以你的Dockerfile应该是这样的。尝试Dockerfile在此更改后重建您的。

FROM node:lts as builder

WORKDIR /app

ENV NODE_OPTIONS=--openssl-legacy-provider

COPY . .

RUN yarn install \
  --prefer-offline \
  --frozen-lockfile \
  --non-interactive \
  --production=false

RUN yarn build

RUN rm -rf node_modules && \
  NODE_ENV=production yarn install \
  --prefer-offline \
  --pure-lockfile \
  --non-interactive \
  --production=true

FROM node:lts

WORKDIR /app

COPY --from=builder /app  .

ENV HOST 0.0.0.0
EXPOSE 3000

CMD [ "yarn", "start" ]
Run Code Online (Sandbox Code Playgroud)