当我使用kubernetes运行php部署时,我遇到了问题因为不加载模块或扩展库。
我的部署文件是这样的:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
labels:
app: php
spec:
selector:
matchLabels:
app: php
replicas: 1
template:
metadata:
labels:
app: php
spec:
containers:
- name: php
image: php:7-fpm
env:
- name: PHP_INI_SCAN_DIR
value: :/usr/local/etc/php/conf.custom
ports:
- containerPort: 9000
lifecycle:
postStart:
exec:
command: ["/bin/sh","-c","docker-php-ext-install pdo pdo_mysql mysqli && docker-php-ext-enable pdo pdo_mysql mysqli"]
volumeMounts:
- name: php-conf
mountPath: /usr/local/etc/php/conf.custom
volumes:
- name: php-conf
configMap:
name: php
我的ConfigMap是这样的:
apiVersion: v1
kind: ConfigMap
metadata:
name: php
labels:
app: php
data:
wordpress-custom.ini: |-
upload_max_filesize = 100M
post_max_size = 100M
default.ini: |-
extension=pdo_mysql.so
extension=mysqli.so
后来我用命令“exec -it”进入Pod,然后我再次“docker-php-ext-enable mysqli”来检查它,但是我收到消息“警告:mysqli(mysqli.so)已经加载!” ,但是当我运行“phpinfo()”命令时,我看到“upload_max_filesize = 100M”和“post_max_size = 100M”已更新,但我看不到模块已启用。
我可以做什么?很感谢
问题是您的docker CMD是运行php-fpm
并且在容器启动后你无法更改加载到内存php配置。
您需要重新启动php-fpm才能应用更改,但重新启动会杀死容器,并且您将丢失所有更改。要为php添加一些库,您应该创建自己的docker镜像并将所有库安装到映像中,而不是在运行时安装它。
还可以在github https://github.com/docker-library/php/issues/331上查看此问题
所以答案是创建自己的映像并使用docker RUN命令安装所有必需的扩展
FROM php:7-fpm
RUN apt-get install php-pdo php-mysql
之后你必须建立这个图像
docker build -t php:7-fpm-mysql .
把它推到一些码头注册表。例如hub.docker.com
docker push php:7-fpm-mysql
注意:自PHP 5.5。*之后不推荐使用php mysql扩展,而是使用PDO