#node.js #docker #npm
Вопрос:
После docker build .
команды RUN npm install
и RUN npm run production
консоли напишите: npm files successfully compiled
, но на самом деле скомпилированные файлы не создаются, и папка node_modules не существует в WORKDIR. Возможно ли выполнить эту команду в контейнере docker для сценариев компиляции? И правильно ли, если я скомпилирую его в контейнере docker?
Мой Док-файл:
FROM php:8.0-fpm
# Copy composer.lock and composer.json
#COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update amp;amp; apt-get install -y libonig-dev libpq-dev
build-essential
libpng-dev
libjpeg62-turbo-dev
libfreetype6-dev
locales
zip
jpegoptim optipng pngquant gifsicle
vim
unzip
git
curl
libzip-dev
RUN apt-get -y install nodejs
RUN apt-get -y install npm
# Clear cache
RUN apt-get clean amp;amp; rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY ./www /var/www
ARG CACHE_DATE=not_a_date
RUN npm install
RUN npm run production
COPY ./www /var/www
# Copy existing application directory permissions
COPY --chown=www:www ./www /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
ENTRYPOINT ["npm", "run"]
Комментарии:
1. пожалуйста, добавьте файл package.json или, по крайней мере
npm run production
, значение в файл package.json. кроме того, как вы подтверждаете, что папка node_modules не создается? похоже, в чем проблема, которая заставила вас задать вопрос о папке?2. npm запускает производство — отлично работает, и все файлы скомпилированы, но не созданы. И в не докерском контейнере все вилки в порядке, я думаю, проблема с докером. Почему после установки npm не существует файла node_modules? Я думаю, проблема с объемами и монтажом. Я проверяю с помощью команды «ls», что node_modules не существуют, и скомпилированные файлы тоже.
3. Это
npm run production
какnpm run build
? откуда вы знаете, что они были составлены успешно? какие тома вы проверяете и как (буквальная команда и процесс проверки)? пожалуйста, обновите свой вопрос этой информацией, чтобы я мог помочь вам быстрее и лучше4. Да, это похоже
build
на команду. Я проверяю вывод консоли при выполненииnpm run production
, и этот вывод такой же, когда я запускаю эту команду за пределами контейнера. И вывод показывает результат успеха после этой команды, но файлы не созданы.5. хорошо, пожалуйста, если возможно, добавьте вывод терминала. как вы проверяете наличие файлов?
Ответ №1:
Я думаю , что вы копируете данные из www несколько раз, а также после npm install
, так что это может быть замена node_modules
папки, поэтому я изменил ваш файл Dockerfile
на новый файл Dockerfile
FROM php:8.0-fpm
# Copy composer.lock and composer.json
#COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update amp;amp; apt-get install -y libonig-dev libpq-dev
build-essential
libpng-dev
libjpeg62-turbo-dev
libfreetype6-dev
locales
zip
jpegoptim optipng pngquant gifsicle
vim
unzip
git
curl
libzip-dev
RUN apt-get -y install nodejs
RUN apt-get -y install npm
# Clear cache
RUN apt-get clean amp;amp; rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY ./www /var/www
ARG CACHE_DATE=not_a_date
RUN npm install
RUN npm run production
# Copy existing application directory permissions
COPY --chown=www:www ./www /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
ENTRYPOINT ["npm", "run"]
Ответ №2:
Я сделал docker-entrypoint.sh запишите и запишите все команды в этот файл.
Комментарии:
1. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.
2. Я добавил строку в точку входа Dockerfile ./docker-entrypoint.sh и в ./docker-entrypoint.sh выполнить
npm install
команду