使用官方 docker 镜像安装 ext-ftp 扩展

问题描述 投票:0回答:1

我正在尝试安装 php ftp 扩展,但没有任何运气。我正在使用官方的 docker PHP 镜像。我正在用

docker compose build --no-cache

重建图像

我也尝试过

RUN docker-php-ext-enable ftp

FROM php:8.3-fpm

WORKDIR /var/www/html

RUN docker-php-ext-install ftp

php -m

[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
hash
iconv
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
random
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xdebug
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]
Xdebug
php docker
1个回答
0
投票

鉴于有问题的 Docker 镜像实际上与

相同或相同
docker.io/library/php:8.3-fpm@sha256:28cfad4b9dfb7c378d861a757a9253e47cc8165b724f113160146fa8a41b48e1

并且您已经尝试过

docker-php-ext-enable ftp
,请仔细检查它显示的诊断信息(在构建时):

+ docker-php-ext-enable ftp

warning: ftp (ftp) is already loaded!

此外,当 grep

php -m
输出时,该基本图像的结果可能表明您已经跳过了实际构建 PHP ftp 扩展的步骤,因为它会自动启用:

+ php -m
+ grep -i ftp
ftp

或者您稍后将通过 Docker 组合中的进一步配置来禁用扩展。

简而言之:可能是配置问题。


在构建时,我建议您强制重建映像,以确保跳过系统上任何缓存的构建或容器工件。

您可以从命令行进行控制(

docker compose

命令,参见
docker compose build) 或使用配置(docker-compose.yml
 文件,参见 
Compose 构建规范)。

然后在容器构建日志中验证运行和

RUN docker-php-ext-install ftp

的结果。

如果不能立即可用,也许会自动通过中断:

FROM php:8.3-fpm ... RUN docker-php-ext-install ftp && php -m | grep -Fx ftp ...
如果未启用安装 

ftp

 扩展,构建将会中断。

如果您想验证日志本身,则应以以下内容开头:

Configuring for: PHP Api Version: 20230831 Zend Module Api No: 20230831 Zend Extension Api No: 420230831 ...
并以:

结束

... Build complete. Don't forget to run 'make test'. + strip --strip-all modules/ftp.so Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ find . -name \*.gcno -o -name \*.gcda | xargs rm -f find . -name \*.lo -o -name \*.o -o -name \*.dep | xargs rm -f find . -name \*.la -o -name \*.a | xargs rm -f find . -name \*.so | xargs rm -f find . -name .libs -a -type d|xargs rm -rf rm -f libphp.la modules/* libs/* rm -f ext/opcache/jit/zend_jit_x86.c rm -f ext/opcache/jit/zend_jit_arm64.c rm -f ext/opcache/minilua
最后我建议先安装所有 PHP 扩展,然后根据 Dockerfile 中的顺序更改工作目录。

现在,在您确认构建实际上具有您想要的扩展之后,通过父子配置(如 Docker 组合)验证任何进一步的 PHP(扩展)配置不会因再次禁用扩展而使构建结果无效。

请随意发表评论并分享除 Docker 容器名称、其标签和 PHP 扩展名称之外的更多细节。

© www.soinside.com 2019 - 2024. All rights reserved.