And*_*ker 2 npm composer-php docker docker-compose
我试图创建一个PHP的Apache与新公共管理和作曲家安装并运行容器composer install
,npm install
在每次构建,但我得到的错误。
# Dockerfile
FROM php:7.4-apache
RUN apt-get -y update && apt-get upgrade -y
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
npm \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
# Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Enable apache modules
RUN a2enmod rewrite headers
EXPOSE 80
#RUN composer install
#RUN npm install
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)
# Dockerfile
FROM php:7.4-apache
RUN apt-get -y update && apt-get upgrade -y
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
npm \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
# Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Enable apache modules
RUN a2enmod rewrite headers
EXPOSE 80
#RUN composer install
#RUN npm install
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)
日志错误:
操作“-D FOREGROUND sh -c php /usr/local/bin/composer install”失败。
如果我尝试使用npm install
.
我可以在 docker 中运行命令,但我想自动化
我认为您遵循了不正确的方法。这些命令是映像构建过程的一部分,因此它们应该是 Dockerfile 的一部分。
并且构建过程发生在卷可用之前(容器未运行,因此不可能依赖于这些)。您需要做的是在运行之前将必要的文件复制到您正在构建的映像中composer install
。
利用多阶段构建dockerfiles 的更明智的方法是:
## First stage. Copy project files and run composer
FROM composer:2 as composer_stage
RUN rm -rf /var/www && mkdir -p /var/www/html
WORKDIR /var/www/html
COPY composer.json composer.lock symfony.lock .env ./
COPY public public/
RUN composer install --ignore-platform-reqs --prefer-dist --no-scripts --no-progress --no-suggest --no-interaction --no-dev --no-autoloader
RUN composer dump-autoload --optimize --apcu --no-dev
COPY bin bin/
COPY config config/
COPY src src/
RUN composer run-script $NODEV post-install-cmd; \
chmod +x bin/console;
## Second stage. Build NPM dependencies
FROM node:12 as npm_builder
COPY --from=composer_stage /var/www/html /var/www/html
WORKDIR /var/www/html
COPY yarn.lock package.json webpack.config.js ./
COPY assets ./assets
RUN yarn install
RUN yarn encore prod
# I'm using yarn here, but using npm would be similar, depending on how your project is setup
# RUN npm install
# RUN npm run build # if necessary and the command exists in your project
## Third stage, mostly copied from your original Dockerfile
FROM php:7.4-apache
RUN apt-get -y update && apt-get upgrade -y
COPY --from=npm_builder /var/www/html /var/www/html
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
npm \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
# Enable apache modules
RUN a2enmod rewrite headers
EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)
这样,您最终生成的映像不包含任何开发依赖项。该映像主要用于生产,因此您可以构建和部署它。
要在开发期间在本地运行它,您只需使用所需的卷挂载点在本地运行相同的映像。您只需要在依赖项更改或升级时重建映像。
您需要调整路径以使其符合您所需的配置(我正在构建项目/var/www/html
并将网络服务器指向/var/www/html/public
,但您可以轻松更改这些路径)。
由于您使用的图像同时包含网络服务器和 PHP 运行时,所以应该是这样。
归档时间: |
|
查看次数: |
1517 次 |
最近记录: |