dnmp 环境安装扩展时有时无的情况
这个环境dnmp
是我一直在使用的一个开源项目, 基本上满足了日常开发的大部分需求,
但是目前使用下来,有的时候可能会根据业务需要安装其他版本的php,所以有时会重新
docker-compose down
docker-compose build php56
这样,重新启动的时候就会出现之前在 php81或者其他版本 中安装的扩展莫名丢失了,
而且扩展也不是手动进到容器里面用install-php-extensions安装的,就很奇怪。
今天在打开另一个项目时突然提示又缺扩展了, 缺了这个 :
SourceGuardian
也没多想直接去容器里面执行 install-php-extensions sourceguardian, 但是它今天也掉链子, 明明配置都加载上了 而且扩展文件也存在就是没加载上
php --ini
Additional .ini files parsed: /usr/local/etc/php/conf.d/docker-fpm.ini,
/usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-imagick.ini,
/usr/local/etc/php/conf.d/docker-php-ext-ldap.ini,
/usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-redis.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sourceguardian.ini, //这个就是
/usr/local/etc/php/conf.d/docker-php-ext-zip.ini
目录/usr/local/lib/php/extensions/no-debug-non-zts-20210902中sourceguardian.so也存在,但是奇怪的是它的权限和其他扩展不一样,
ls -l
chmod +x sourceguardian.so
chown root:root sourceguardian.so
改成一样了还行不行,看看错误日志吧果然
PHP Warning: Failed loading Zend extension 'sourceguardian.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20210902/sourceguardian.so (Error loading shared library libudev.so.1: No such file or directory (needed by /usr/local/lib/php/extensions/no-debug-non-zts-20210902/sourceguardian.so)), /usr/local/lib/php/extensions/no-debug-non-zts-20210902/sourceguardian.so.so (Error loading shared library /usr/local/lib/php/extensions/no-debug-non-zts-20210902/sourceguardian.so.so: No such file or directory)) in Unknown
好像是缺依赖库libudev.so, 那就整吧
apk update
apk upgrade
apk add libudev-dev
上面这个包还没有 最后用这个替代的
apk add eudev-dev
这回可以了, 那么我明明什么都没动,之前怎么就可以正常的安装,这次扩展掉了怎么缺这么多东西…, 有没有跟我一样用这个项目的 , 有出现过这种情况么
把在容器里面执行的这些写道构建过程里 Docerfile中 不然重新构建会将运行时的设置冲掉
down掉了,相当于把容器删除了,容器内的东西自然就没有了
如果之前运行的容器不变的情况下,你可以直接维护compose.yml 文件,添加你想要的容器服务就可以了,直接docker compose build 【某个服务名】然后在docker composer up -d 【服务名】
要不试试这个 github.com/tongpan11/dnmp
同款dnmp用了三四年了,拓展在
.env
文件中定义安装的,并且同时跑php7.4
、php8.0
、php8.1
三个环境,从来没出现任何问题,包括你说的这种也没出现过 :joy: