我想在我的 Laravel 應用程式的多級 dockerfile 中使用 docker composer 影像以減小其大小。我的依賴項需要 PHP 7.4 的問題,但作曲家的 PHP 是 8.1.1。有沒有辦法自定義這個?如果沒有辦法降級它的 PHP 版本,我該如何減小我的 docker 鏡像的大小,我應該使用什么來安裝我的專案依賴項?
我嘗試使用--ignore-platform-reqs標志安裝依賴項,但該應用程式在構建后不起作用。
FROM composer:latest
COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install
uj5u.com熱心網友回復:
Composer 映像將使用當前最新版本的 PHP,因此composer:latest永遠不會為您提供 7.4。您可以向后掃描舊的 Composer docker 鏡像,直到找到基于 7.4 的最新鏡像,然后使用該特定版本的鏡像。
FROM composer:1.10.19
但是請注意,您永遠不會以這種方式獲得 Composer 的更新版本。
或者,如果大小是一個問題,那么您可以基于影像alpine:latest(它很小,目前在其應用程式存盤庫中使用 7.4),然后使用apk add php-cli. 這會給你一個大約 20mb 的影像,但遲早 Alpine 會將他們的基本 PHP 更新到 8.0,你的影像會損壞。
可能您最好的選擇是將您的映像基于顯式版本控制的 PHP 容器之一php:7.4-cli-alpine,然后將最新的 Composer 安裝到該映像中。這將使您更好地控制在您的映像中運行的 PHP 版本,并且稍后復制此映像以將其基于 8.0 進行升級測驗將非常容易。
uj5u.com熱心網友回復:
我最近剛遇到這個問題,并通過兩個步驟解決了它。
- 使用
platform配置告訴作曲家使用指定版本的 PHP 。 - 告訴作曲家不要生成自動加載,并在最終影像或運行正確版本的 PHP 的影像中手動執行。
這最近成為一個問題,因為在 PHP 8.1 中,post-autoload-dump開始拋出關于 LaravelCollection類的錯誤。后自動加載腳本正在運行 Laravel 代碼,這意味著即使我們剛剛安裝了 v 7.X 的依賴項,我們仍在使用 8.1 執行腳本。
可能有更好的方法來解決這個問題,如果是這樣,請告訴我!,但這是我所做的。
更新composer.json以指定平臺:
"config": {
"platform": {
"php": "7.3.33" // Or your specific version
}
},
告訴作曲家跳過自動加載生成:
RUN composer install --no-autoloader
最后,在我的最終影像中:
RUN composer dump-autoload
這里的缺點是您必須在最終映像中安裝 composer,這在某種程度上違背了在構建期間拆分作業的目的。
您可以選擇遵循Composer docker 映像自述檔案中的建議并以這種方式包含它,并完全放棄多階段構建。:
COPY --from=composer /usr/bin/composer /usr/bin/composer
雖然我不能自信地說沒有更好的選擇來解決這個問題,但我希望這個答案能解釋為什么存在這個問題,并為你指明解決它的正確方向。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388084.html
