WedX - журнал о программировании и компьютерных науках

Docker и npm — gyp ERR! не нормально

Все работало с моим клиентом, пока я не попытался решить проблему с отключением сети, обновив react-scripts в моей клиентской службе docker с 3.0.1 до 3.3.0, используя npm install <package> --save и заново создав ее.

Но потом он начал жаловаться, требуя css-loader и style-loader, и я их установил. Затем это не сработало, и я вернул свою настройку обратно к 3.0.1, удалив оба предыдущих пакета с флагом --save, чтобы удалить его и из node_modules/.

Теперь, когда я запускаю docker-compose -f docker-compose-dev.yml build client, я получаю следующую ошибку, хотя клиентская служба создана:

> [email protected] install /usr/src/app/node_modules/chokidar/node_modules/fsevents
> node-gyp rebuild

gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | x64
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 FSReqCallback.oncomplete (fs.js:158:21)
gyp ERR! System Linux 4.9.184-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 /usr/src/app/node_modules/chokidar/node_modules/fsevents
gyp ERR! node -v v11.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 

> [email protected] postinstall /usr/src/app/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon: 
> https://opencollective.com/core-js 
> https://www.patreon.com/zloirock 

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> [email protected] install /usr/src/app/node_modules/jest-haste-map/node_modules/fsevents
> node-gyp rebuild

gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | x64
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 FSReqCallback.oncomplete (fs.js:158:21)
gyp ERR! System Linux 4.9.184-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 /usr/src/app/node_modules/jest-haste-map/node_modules/fsevents
gyp ERR! node -v v11.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 

Это мой docker-compose-dev.yml:

web:
    build:
      context: ./services/web
      dockerfile: Dockerfile-dev
    volumes:
      - './services/web:/usr/src/app'

    ports:
      - 5001:5000
    environment:
      - FLASK_ENV=development
      - APP_SETTINGS=brandio.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious
    depends_on:  
      - web-db
      - redis

client:
    build:
      context: ./services/client
      dockerfile: Dockerfile-dev
    volumes:
      - './services/client:/usr/src/app'
      - '/usr/src/app/node_modules'
    ports:
      - 3000:3000
    environment:
      - NODE_ENV=development
      - REACT_APP_WEB_SERVICE_URL=${REACT_APP_WEB_SERVICE_URL}
    depends_on:
      - web

Это мой клиент Dockerfile:

# base image
FROM node:11.12.0-alpine

# set working directory
WORKDIR /usr/src/app

# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package.json /usr/src/app/package.json
COPY package-lock.json /usr/src/app/package-lock.json
RUN npm ci
RUN npm install [email protected] -g --silent

# start app
CMD ["npm", "start"]

веб-сервис Dockerfile, от которого зависит клиент. Я пытался установить node-gyp в окружении, и python определенно здесь. Но безрезультатно:

FROM python:3.7-slim-buster

RUN apt-get update && apt-get -y dist-upgrade 
RUN apt-get -y install node-gyp build-essential libssl-dev libffi-dev libblas3 libc6 liblapack3 gcc python3-dev 
RUN apt install -y netcat

# set working directory
WORKDIR /usr/src/app

COPY ./requirements.txt /usr/src/app/requirements.txt 
RUN pip3 install -r requirements.txt

# add entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh

RUN chmod +x /usr/src/app/entrypoint.sh

# add app
COPY . /usr/src/app

# run server
CMD ["/usr/src/app/entrypoint.sh"]

Пакет.json:

    {
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^0.18.1",
    "react": "^16.8.6",
    "react-alert": "^5.5.0",
    "react-dom": "^16.8.6",
    "react-hot-loader": "^4.5.3",
    "react-html-parser": "^2.0.2",
    "react-player": "^1.13.0",
    "react-router-dom": "^5.0.0",
    "react-scripts": "^3.3.0",
    "react-transition-group": "^2.9.0",
    "spotify-web-api-js": "^1.2.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "enzyme": "^3.11.0",
    "enzyme-adapter-react-16": "^1.15.2"
  }
}

Теперь он вернулся к 3.3.0, но проблема не устранена.


$ npm list показывает мне проблемы с одноранговыми зависимостями:

npm ERR! peer dep missing: @types/react@^15.0.0 || ^16.0.0, required by [email protected]
npm ERR! peer dep missing: typescript@^3.2.1, required by [email protected]
npm ERR! peer dep missing: node-sass@^4.0.0, required by [email protected]
npm ERR! peer dep missing: sass@^1.3.0, required by [email protected]
npm ERR! peer dep missing: fibers@>= 3.1.0, required by [email protected]
npm ERR! peer dep missing: typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta, required by [email protected]
npm ERR! peer dep missing: typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta, required by [email protected]

Я не знаю, связаны ли проблемы.


Я также установил node-gyp глобально, проверил, ошибка сохранилась, а затем снова удалил.


Как я могу это исправить?

07.01.2020

  • похоже, что в контейнере node:11.12.0-alpine не установлен дистрибутив Python 07.01.2020
  • Я не понимаю. он работал в течение нескольких месяцев с этой точной настройкой. 07.01.2020
  • Возможно, но я не вижу ничего в этом файле докеров, который устанавливает Python, поэтому, если он работал раньше, это своего рода чудо. Решения, с которыми я работаю, имеют два файла докеров, один для узла и один для python, с файлом docker-compose.yml, который загружает оба. 07.01.2020
  • python установлен в службе web, от которой зависит клиент. это имеет смысл? 07.01.2020
  • это не так: по крайней мере, без дополнительной информации о том, где вы определили эту web задачу и что в ней содержится. 07.01.2020
  • пожалуйста, обратитесь к редактированию 07.01.2020
  • Вы редактировали свой веб-файл dockerfile? # FROM python:3.6-alpine закомментирован, так что можно поспорить, что FROM alpine:3.7 на самом деле не работает. Тот, который я использую ежедневно, использует FROM python:3.7-slim. 07.01.2020
  • Это работало, поверьте мне. Это было отредактировано как минимум 6 месяцев, перестроено, и с тех пор клиент работал как часы. Он сломался только вчера, когда я установил npm. 07.01.2020
  • Какая именно команда приводит к ошибке? И почему вы думаете, что эта команда связана с Docker? 19.01.2020
  • эта команда: docker-compose -f docker-compose-dev.yml build client 19.01.2020

Ответы:


1

Добавьте следующую строку в Dockerfile вашего клиента:

RUN apk update && apk add python make g++

Итак, это должно выглядеть так:

# base image
FROM node:11.12.0-alpine

RUN apk update && apk add python make g++

# set working directory
WORKDIR /usr/src/app

# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package.json /usr/src/app/package.json
COPY package-lock.json /usr/src/app/package-lock.json
RUN npm ci
RUN npm install [email protected] -g --silent

# start app
CMD ["npm", "start"]
20.01.2020
  • мое веб-изображение python3.7. не следует ли добавить сюда python3? 20.01.2020
  • Рекомендуемое изменение относится к файлу докера клиента, а не к файлу веб-докера. Питон нужен для пересборки модуля node-gyp. Этот питон не имеет ничего общего с питоном в вашем веб-докере. 21.01.2020
  • Я нахожу интересным, что для того, чтобы npm ci работал в вашем ci/cd, вам нужен python в качестве зависимости. 06.03.2020
  • Зачем ставить эту строку: ENV PATH /usr/src/app/node_modules/.bin:$PATH ? Я читал другие сообщения, где нет этой команды. 16.09.2020
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]