установка npm не создает папку node_modules в контейнере docker

#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 команду