【问题标题】:npm install doesn't create node_modules folder in docker containernpm install 不会在 docker 容器中创建 node_modules 文件夹
【发布时间】:2021-09-03 03:59:31
【问题描述】:

docker build . 命令RUN npm installRUN npm run production 控制台写入:npm files successfully compiled 之后,但实际上没有创建编译文件,并且 WORKDIR 中不存在 node_modules 文件夹。可以在 docker 容器中运行此命令以编译脚本吗?如果我在 docker 容器中编译它是否正确?

我的 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 && 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 && 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"]

【问题讨论】:

  • 请在 package.json 文件中添加 package.json 文件或至少 npm run production 含义。另外,您如何确认未创建 node_modules 文件夹?似乎是什么问题让您提出了有关文件夹的问题?
  • npm run production - 工作正常,所有文件都已编译,但未创建文件。在不是 docker 容器中,所有叉子都很好,我认为 docker 有问题。为什么 npm install 后不存在 node_modules 文件?我认为体积和安装有问题。我用命令“ls”检查,node_modules 不存在,也编译了文件。
  • npm run productionnpm run build 一样吗?你怎么知道他们编译成功?您正在检查哪些卷以及如何检查(文字命令和检查过程)?请使用此信息更新您的问题,以便我可以更快更好地为您提供帮助
  • 是的,就像build 命令。我在执行npm run production 时检查控制台输出,当我在容器外运行此命令时,此输出相同。并在此命令后输出显示成功结果,但未创建文件。
  • 好的,请尽可能添加终端输出。您如何检查文件是否存在?

标签: node.js docker npm


【解决方案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 && 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 && 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 文件并将所有命令写入该文件。

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    • 我在 Dockerfile ENTRYPOINT ./docker-entrypoint.sh 和 ./docker-entrypoint.sh 中添加了行 npm install 命令
    猜你喜欢
    • 2022-01-15
    • 2016-10-29
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多