我试图创建一个带有npm和composer安装的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"]
# docker-compose.yml
version: "3"
services:
painel-admin:
build:
context: ./bin/painel-admin
container_name: 'painel-admin'
command: >
sh -c "php /usr/local/bin/composer install"
restart: 'always'
ports:
- "81:80"
- "82:443"
volumes:
- ${DOCUMENT_ROOT-..}:/var/www/html
- ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
- ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
- ${LOG_DIR-./logs/apache2}:/var/log/apache2
日志错误:
执行 '-D FOREGROUND sh -c php /usr/local/bin/composer install' 失败。
如果我尝试使用 npm install
会出现相同的错误。
我可以在docker内运行这些命令,但我想要自动化。
RUN npm install
。这意味着将应用程序代码复制到镜像中,而不是使用volumes:
进行绑定挂载。将镜像中的ENTRYPOINT
更改为CMD
也会使command:
覆盖工作,但它将更改容器以运行构建时命令而不是 HTTP 守护程序。 - David Maze