Docker node-gyp 上的节点 Alpine 图像构建失败
Docker Node Alpine Image Build Fails on node-gyp
我正在尝试 Docker 化 Vue.js 应用程序。我使用 node:10.15-alpine
Docker 图像作为基础。映像构建失败并出现以下错误:
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at PythonFinder.failNoPython (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:484:19)
gyp ERR! stack at PythonFinder.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:406:16)
gyp ERR! stack at F (/usr/local/lib/node_modules/npm/node_modules/which/which.js:68:16)
gyp ERR! stack at E (/usr/local/lib/node_modules/npm/node_modules/which/which.js:80:29)
gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/which/which.js:89:16
gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/isexe/index.js:42:5
gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/isexe/mode.js:8:5
gyp ERR! stack at FSReqWrap.oncomplete (fs.js:154:21)
gyp ERR! System Linux 4.9.125-linuxkit
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /app/node_modules/inotify
gyp ERR! node -v v10.15.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! inotify@1.4.2 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the inotify@1.4.2 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
应用程序 运行 在我的 Ubuntu 机器上。我在网上搜索了一个解决方案。
我试过了:
FROM node:10.15-alpine
EXPOSE 8080
RUN mkdir -p /app/src
WORKDIR /app
COPY build/ config/ dist/ static/ .babelrc .postcssrc.js index.html /app/
COPY package*.json ./
RUN apk add --no-cache make gcc g++ python && \
npm install --production --silent && \
apk del make gcc g++ python
ADD src/ /app/src/
CMD ["npm", "start"]
这也失败了。错误输出非常详细并且引用了 C/C++ 代码。
这是我当前的 Docker 文件:
FROM node:10.15-alpine
EXPOSE 8080
RUN mkdir -p /app/src
WORKDIR /app
COPY build/ config/ dist/ static/ .babelrc .postcssrc.js index.html /app/
COPY package*.json ./
RUN npm install
ADD src/ /app/src/
CMD ["npm", "start"]
谁能帮我用 node-gyp 解决这个问题?我希望能够使用 Docker 容器 运行 应用程序,但我需要先获取要构建的映像。
更新
因为构建在我的 Ubuntu 机器上运行,所以我检查了 node
版本。当时是 8.12,所以我改用 node:8.12-alpine
图像,应用程序现在可以使用以下 Docker 文件:
FROM node:8.12-alpine
RUN apk add g++ make python
EXPOSE 8080
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
在我的 post 更新中也有说明,这是 Dockerfile
我用来让事情正常运行的方法:
FROM node:8.12-alpine
RUN apk add g++ make py3-pip
EXPOSE 8080
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
如果您的要求要求图像最小化 space,请考虑使用 RUN apk add --no-cache --virtual [package-list]
(而不是 apk add [package-list]
)安装必要的包,然后使用 [=14= 清除图像中的缓存].
由于您在 docker 上使用的是 Alpine 版本,因此您可能希望尽可能少地使用 space,同时修复 node-gyp rebuild
错误。为此,建议使用以下命令,即不使用缓存和使用稍后可以删除的虚拟包。您还应该将 apk add
和 npm install
命令组合在一起;这将有助于进一步减少 docker 缓存层之间的 space。
FROM node:8.12-alpine
EXPOSE 8080
WORKDIR /app
COPY . .
RUN apk add --no-cache --virtual .gyp \
python \
make \
g++ \
&& npm install \
&& apk del .gyp
CMD ["npm", "start"]
对于使用 node:14-alpine
的任何人,这为我修复了它:RUN apk add --no-cache python3 py3-pip make g++
对于使用 node:16.13-alpine3.15
(或关闭版本)的任何人:
FROM node:16.13-alpine3.15
RUN apk --no-cache add --virtual .builds-deps build-base python3
WORKDIR /app
COPY package*.json ./
RUN npm install --production && npm rebuild bcrypt --build-from-source && npm cache clean --force
我正在尝试 Docker 化 Vue.js 应用程序。我使用 node:10.15-alpine
Docker 图像作为基础。映像构建失败并出现以下错误:
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at PythonFinder.failNoPython (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:484:19)
gyp ERR! stack at PythonFinder.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:406:16)
gyp ERR! stack at F (/usr/local/lib/node_modules/npm/node_modules/which/which.js:68:16)
gyp ERR! stack at E (/usr/local/lib/node_modules/npm/node_modules/which/which.js:80:29)
gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/which/which.js:89:16
gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/isexe/index.js:42:5
gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/isexe/mode.js:8:5
gyp ERR! stack at FSReqWrap.oncomplete (fs.js:154:21)
gyp ERR! System Linux 4.9.125-linuxkit
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /app/node_modules/inotify
gyp ERR! node -v v10.15.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! inotify@1.4.2 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the inotify@1.4.2 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
应用程序 运行 在我的 Ubuntu 机器上。我在网上搜索了一个解决方案。
我试过了:
FROM node:10.15-alpine
EXPOSE 8080
RUN mkdir -p /app/src
WORKDIR /app
COPY build/ config/ dist/ static/ .babelrc .postcssrc.js index.html /app/
COPY package*.json ./
RUN apk add --no-cache make gcc g++ python && \
npm install --production --silent && \
apk del make gcc g++ python
ADD src/ /app/src/
CMD ["npm", "start"]
这也失败了。错误输出非常详细并且引用了 C/C++ 代码。
这是我当前的 Docker 文件:
FROM node:10.15-alpine
EXPOSE 8080
RUN mkdir -p /app/src
WORKDIR /app
COPY build/ config/ dist/ static/ .babelrc .postcssrc.js index.html /app/
COPY package*.json ./
RUN npm install
ADD src/ /app/src/
CMD ["npm", "start"]
谁能帮我用 node-gyp 解决这个问题?我希望能够使用 Docker 容器 运行 应用程序,但我需要先获取要构建的映像。
更新
因为构建在我的 Ubuntu 机器上运行,所以我检查了 node
版本。当时是 8.12,所以我改用 node:8.12-alpine
图像,应用程序现在可以使用以下 Docker 文件:
FROM node:8.12-alpine
RUN apk add g++ make python
EXPOSE 8080
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
在我的 post 更新中也有说明,这是 Dockerfile
我用来让事情正常运行的方法:
FROM node:8.12-alpine
RUN apk add g++ make py3-pip
EXPOSE 8080
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
如果您的要求要求图像最小化 space,请考虑使用 RUN apk add --no-cache --virtual [package-list]
(而不是 apk add [package-list]
)安装必要的包,然后使用 [=14= 清除图像中的缓存].
由于您在 docker 上使用的是 Alpine 版本,因此您可能希望尽可能少地使用 space,同时修复 node-gyp rebuild
错误。为此,建议使用以下命令,即不使用缓存和使用稍后可以删除的虚拟包。您还应该将 apk add
和 npm install
命令组合在一起;这将有助于进一步减少 docker 缓存层之间的 space。
FROM node:8.12-alpine
EXPOSE 8080
WORKDIR /app
COPY . .
RUN apk add --no-cache --virtual .gyp \
python \
make \
g++ \
&& npm install \
&& apk del .gyp
CMD ["npm", "start"]
对于使用 node:14-alpine
的任何人,这为我修复了它:RUN apk add --no-cache python3 py3-pip make g++
对于使用 node:16.13-alpine3.15
(或关闭版本)的任何人:
FROM node:16.13-alpine3.15
RUN apk --no-cache add --virtual .builds-deps build-base python3
WORKDIR /app
COPY package*.json ./
RUN npm install --production && npm rebuild bcrypt --build-from-source && npm cache clean --force