Knu*_*uth 1 node.js python-2.7 docker alpine-linux
我需要在 Vue 应用程序的 Dockerfile 中包含 python2,以便构建依赖项 node-sass@4.14.1 (在 package.json 中定义)。以下工作正常:
FROM node:16.15.0-alpine as builder
RUN apk add --no-cache python2 make g++
...
ADD app/package.json .
RUN CXXFLAGS="--std=c++14" npm install
Run Code Online (Sandbox Code Playgroud)
但这个节点镜像使用的是 alpine 3.15,它在 zlib 中有一个我想删除的严重漏洞,所以我想使用更新的 alpine 版本。但是使用例如node:16.15.1-alpine(使用alpine-3.16)然后apk添加失败,因为python2不再包含在该图像中。
我尝试设置 PYTHON 环境变量并使用 python3 代替,但是 node-gyp@3.8.0 (由 node-sass@4.14.1 使用)的构建失败并出现 SyntaxError: Missing Parentheses in call to 'print',所以对于这个版本,似乎需要 python2 来构建。
在 package.json 中,我的 devDependency 是:
"devDependencies": {
...
"node-sass": "^4.14.1",
"sass-loader": "^7.0.1"
Run Code Online (Sandbox Code Playgroud)
(是的,我意识到node-sass版本很旧(就像python2一样),并且node-sass已被弃用,但尝试使用此包的较新版本会导致其他问题,所以我首先想尝试只需使构建适用于现有版本,但使用较新的 alpine。)
使用node:16.15.1-alpine作为基础镜像时如何添加python2?
对于未来的读者 - 这不是关于如何添加 python2 的答案,而是关于我如何解决根本问题 - 失败的构建的答案:
需要 python2 来构建的包是node-gyp,node-sass. 为了消除这种需要,我替换node-sass为sass:
npm uninstall node-sass
npm install sass
Run Code Online (Sandbox Code Playgroud)
由于 sass 不需要构建 python 或 g++,我可以将 Dockerfile 简化为
FROM node:16.15.1-alpine as builder
...
ADD app/package.json .
RUN npm install
...
Run Code Online (Sandbox Code Playgroud)
现在我可以将节点映像升级到 16.15.1 及更高版本,这正是我所需要的。
请仍然随意回答如何添加 python2,以防未来的读者可能仍然需要它。但为了解决构建问题,我的解决方案是更改包。