Docker节点:8.16.0-alpine错误:找不到:python2

时间:2019-06-15 14:31:22

标签: python node.js docker alpine

我需要在docker容器中运行npm rebuild node-sass --force

但是我遇到了一个错误(即使我已经安装了python之后)

Error: Can't find Python executable "python", you can set the PYTHON env variable.

这是我的Dockerfile

FROM node:8.16.0-alpine

RUN mkdir /app
WORKDIR /app

# --no-cache: download package index on-the-fly, no need to cleanup afterwards
# --virtual: bundle packages, remove whole bundle at once, when done
RUN apk --no-cache --virtual build-dependencies add \
    python \
    make \
    g++ \
    bash \
    && npm install \
    && apk del build-dependencies

RUN npm install -g nodemon

COPY package.json package.json
COPY client/package.json client/package.json

RUN npm install
RUN npm run install:client
RUN npm uninstall node-sass && npm install node-sass
RUN npm rebuild node-sass --force

COPY . .

LABEL maintainer="Varis Darasirikul"

VOLUME ["/app/public"]

CMD npm run dev

这是我的docker-compose

version: '3'

services:
  web:
      build: '.'
      container_name: node-web
      # env_file:
        # - '.env'
      ports:
        - '80:8000'
        - '5000:5000'
        - '3000:3000'
      volumes:
        - '.:/app'
      networks:
        - front-tier
        - back-tier
      # depends_on:
        # - redis
        # - db

networks:
  front-tier:
  back-tier:

即使我跑步

docker-compose up --build --force-recreate

仍然无法正常工作

该如何解决?

谢谢!

3 个答案:

答案 0 :(得分:1)

问题是根本没有安装Python。

您的父图像node:8.16.0-alpine不包含Python。您可以验证以下内容:

> docker run -it node:8.16.0-alpine sh
/ # python
sh: python: not found

误解可能是由于您正在此行上临时安装python造成的:

RUN apk --no-cache --virtual build-dependencies add \
    python \
    ...

它已添加到虚拟包build-dependencies中,但是在npm install完成后,您运行apk del build-dependencies再次删除了Python!

在完成所有build-dependencies的工作之后,只需将卸载npm rebuild的行移至我认为可以正常工作的行即可。

答案 1 :(得分:0)

因为您使用的是alpine图片,这是一个不包含python的小图片。您可以通过运行python来安装apk add,并在安装节点模块后将其删除。

FROM node:alpine

RUN apk add --no-cache --virtual .gyp \
        python \
        make \
        g++ \
    && npm install \
    && apk del .gyp

更多阅读:https://github.com/nodejs/docker-node/issues/282

答案 2 :(得分:0)

存在使用 bcryptjs 的替代解决方案。性能可能并不重要,但是使用而不是应用变通方法来工作!