J'essaie de dockeriser une application de Vue.js. J'utilise le node:10.15-Alpine
Image Docker comme base. La construction d'images échoue avec l'erreur suivante:
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: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","Arch":"any"} (current: {"os":"linux","Arch":"x64"})
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
L'application s'exécute sur ma machine Ubuntu. Et j'ai recherché une résolution en ligne.
J'ai essayé:
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"]
Cela échoue aussi. La sortie d'erreur est assez verbeuse et références C/C++ code.
Voici mon dockerfile actuel:
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"]
Quelqu'un peut-il m'aider à résoudre ce problème avec Node-Gyp? J'aimerais pouvoir exécuter l'application à partir d'un conteneur Docker, mais je dois obtenir l'image pour la construction en premier.
Comme la construction travaillait sur ma machine Ubuntu, j'ai vérifié la version node
. C'était 8.12, alors je bascule à l'aide de la node:8.12-Alpine
Image et l'application fonctionne maintenant avec le dockerfile suivant:
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"]
Puisque vous utilisez une version alpine sur Docker, vous voudrez peut-être utiliser aussi peu d'espace que possible, tout en corrigeant le node-gyp rebuild
Erreur. Pour cela, il est recommandé d'utiliser la commande ci-dessous, c'est-à-dire sans utiliser de cache et avec un package virtuel pouvant être supprimé ultérieurement. Aussi, vous devriez combiner le apk add
et npm install
commandes ensemble; Cela aiderait à réduire davantage l'espace entre les couches de cache Docker.
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"]