#node.js #docker
#node.js #докер
Вопрос:
Действительно пытаюсь определить проблему здесь. Я пытаюсь контейнеризировать сайт WordPress на своей рабочей станции для разработки. цели. (Отказ от ответственности: несколько новичок в Docker, в настоящее время использует его в нескольких проектах Laravel для той же цели, но еще не интегрировал его в производство).
Вот соответствующая часть моего docker-compose.yml
version: "3"
services:
...
npm:
build:
context: .
dockerfile: ./docker/node/Dockerfile
container_name: npm
volumes:
- ./:/var/www/html
- /var/www/html/docker/
working_dir: /var/www/html/wp-content/themes/my-cust-theme
depends_on:
- wordpress
entrypoint: ["npm", "--no-bin-links"]
networks:
- wp-net
...
networks:
wp-net:
Вот содержимое связанного файла Dockerfile (у меня было больше здесь, но в попытке отладки оно было сокращено до этого):
FROM node:12.17.0-alpine3.9
RUN apk --update --no-cache --virtual build-dependencies add
git
libtool
python2
nasm
libpng-dev
autoconf
gcc
g
automake
make
Я знаю, что здесь предпочтительнее многоступенчатая сборка или другие методы, упомянутые здесь. Просто пытаюсь заставить скрипты сборки узла функционировать, прежде чем оптимизировать свои контейнеры.
После сборки контейнеров с:
docker-compose up -d --build
Я запускаю:
docker-compose run --rm npm install
И пакеты, похоже, успешно установлены. Фактически, запуск после установки docker-compose run --rm npm list --depth 0
дает мне ожидаемый результат. Я вижу, что все пакеты в моем package.json
были установлены.
Сценарии для моего проекта следующие:
"scripts": {
"debug": " webpack-dev-server --config webpack.dev.js",
"dev": "webpack-dashboard -- webpack-dev-server --config webpack.dev.js",
"production": "NODE_ENV=production npx webpack --config webpack.prod.js --progress --hide-modules"
}
На данный момент я полностью потерян:
Если я запускаю
docker-compose run --rm npm run dev
Вывод выглядит примерно так:
Creating some-new-wp-site_npm_run ... done
> some-new-wp-site@1.0.0 dev /var/www/html/wp-content/themes/my-cust-theme
> webpack-dashboard -- webpack-dev-server --config webpack.dev.js
sh: webpack-dashboard: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! some-new-wp-site@1.0.0 dev: `webpack-dashboard -- webpack-dev-server --config webpack.dev.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the some-new-wp-site@1.0.0 dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-01-23T15_51_28_095Z-debug
Я попытался запустить docker-compose down -v --rmi all
и повторить этот процесс, и он дал идентичные результаты.
Комментарии:
1. Похоже, вам не хватает частей файла Dockerfile, в которых
COPY
содержится код приложения, иRUN
последовательности сборки. Это то, что вы включили сюда целиком?2. Возможно, я ошибаюсь, но разве
volumes
не указаноdocker-compose.yml
, что нужно позаботиться об этом? Если нет, я не знаю, как / зачемdocker-compose run --rm npm list --depth 0
вообще возвращать что-либо / все, что включено в мойpackage.json
.3. Если вы монтируете содержимое узла с привязкой к неспециализированному контейнеру узла, запуск узла непосредственно на хосте без докера, вероятно, будет гораздо более удобной настройкой для повседневной разработки.
4. Я вижу, как это было бы удобно. Но он не будет разрабатываться исключительно на одной машине, и я не хочу, чтобы версия узла узла была фактором, это делается для того, чтобы обойти необходимость nvm. Я попробую метод, о котором вы умолчали в своем первоначальном комментарии.
Ответ №1:
без npm err log
я могу только догадываться, в чем проблема. вероятно, npm-cli не может найти команду webpack-dashboard
and webpack-dev-server
, потому что она не установлена глобально.
попробуйте добавить webpack-dashboard
и webpack-dev-server
в свои скрипты внутри package.json.
"scripts": {
... your scripts,
"webpack-dashboard": "webpack-dashboard",
"webpack-dev-server": "webpack-dev-server"
}
Комментарии:
1. Если в моем случае установлен локально
/var/www/html/wp-content/themes/my-cust-theme/node_modules
, разве он не будет запускаться оттуда?2. да, вы можете запустить модуль напрямую, указав путь к модулю внутри ваших скриптов, но я настоятельно рекомендую способ добавления
webpack-dashboard
псевдонима к вашим скриптам! если путь изменится из-за изменений модуля, у вас возникнут огромные проблемы. проверьте мое решение и дайте мне знать, работает ли оно.3. Возможно, я что-то пропустил… Но, похоже, это не сработало. Я установил глобально, добавил псевдоним, повторно запустил скрипт, получил ту же ошибку.
4. эта ошибка также возникает при запуске
npm run debug
? если это так, дополнительно добавьте"webpack-dev-server": "webpack-dev-server"
в свой package.json и повторите попыткуnpm run dev
команды5. Пробовал, не работает. Кроме того, стоит упомянуть, что он все еще говорит об этом
webpack-dashboard: not found
.