Helm + Kubernetes,在 PHP 中加载和启用扩展或模块
Helm + Kubernetes, load and enable extensions or modules in PHP
我在 运行 php 部署 kubernetes 时遇到问题,因为没有加载模块或扩展库。
我的部署文件是这样的:
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" 来检查它,但我收到消息 "warning: mysqli (mysqli.so) is already loaded!",但是当我 运行 "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 运行 命令安装所有必需的扩展
FROM php:7-fpm
RUN apt-get install php-pdo php-mysql
之后你必须构建这个镜像
docker build -t php:7-fpm-mysql .
将其推送到某些 docker 注册表。例如hub.docker.com
docker push php:7-fpm-mysql
注意:php mysql 扩展自 PHP 5.5.* 起已弃用,请改用 PDO
我在 运行 php 部署 kubernetes 时遇到问题,因为没有加载模块或扩展库。
我的部署文件是这样的:
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" 来检查它,但我收到消息 "warning: mysqli (mysqli.so) is already loaded!",但是当我 运行 "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 运行 命令安装所有必需的扩展
FROM php:7-fpm
RUN apt-get install php-pdo php-mysql
之后你必须构建这个镜像
docker build -t php:7-fpm-mysql .
将其推送到某些 docker 注册表。例如hub.docker.com
docker push php:7-fpm-mysql
注意:php mysql 扩展自 PHP 5.5.* 起已弃用,请改用 PDO