Docker上に構築したLaravelを起動したときに、以下のエラーが発生した時の対処法についてまとめています。
Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.3.0". You are running 7.2.34. in /var/www/vendor/composer/platform_check.php on line 24
エラーの内容詳細
表示された以下のエラーの内容は「Composerを使うために必要なPHPのバージョンが7.3.0以上である必要があるのに、バージョンが低すぎる」という内容です。
Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.3.0". You are running 7.2.34. in /var/www/vendor/composer/platform_check.php on line 24
問題のDockerfile
ここでは、以下のようにPHP-FPMのイメージのバージョンに「7.2」を指定しています。これがエラーの原因となっています。
FROM php:7.2-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 \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
# 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-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/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 . /var/www
# Copy existing application directory permissions
COPY --chown=www:www . /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
対応方法
エラーの対処法は以下の3ステップになります。
ベースイメージのバージョンを上げる
まずはPHP-FPMのベースイメージのバージョンを上げます。今回のエラーはバージョン7.3以上を使ってくれという内容なので「7.3」を指定します。
FROM php:7.2-fpm
↓ 以下に修正
FROM php:7.3-fpm
パッケージlibonig-devとlibzip-devを追加
PHP-FPMのバージョンを7.3に上げたことで発生するエラーを回避するために、以下の2つのパッケージを追加します。
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl \
libonig-dev \
libzip-dev
エクステンションのmbstringを削除
上記で、liboning-devを導入したことで、PHPのエクステンションとして導入している「mbstring」が不要になります。このため、「mbstring」を削除します。
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
↓ 以下に修正
# Install extensions
RUN docker-php-ext-install pdo_mysql zip exif pcntl
以上で修正は完了です。
修正後のDockerfile
修正後の全体のDockerfileは以下のようになります。
FROM php:7.3-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 \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl \
libonig-dev \
libzip-dev
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/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 . /var/www
# Copy existing application directory permissions
COPY --chown=www:www . /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
PHPのバージョンがcomposerよりも高い場合
上記はPHPのバージョンが指定よりも低かったために発生したエラーです。
場合によっては、PHPのバージョンがComposerよりも高い状況が発生することもあります。
PHPのバージョンが高すぎてダウングレードを要求された場合はダウングレードせずとも、composerの設定ファイルを書き換えることで対応できます。
対応方法
composer.jsonのconfigに以下を追加
"config": {
(省略)
"platform-check": false
},
以上で、エラーを拾っていた機能をOFFにすることができます。
(補足)エラーを実行している処理
なお、今回表示されたエラーを拾う処理が書かれているのは、vendor/composer/platform_check.phpです。
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 70300)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}