Helm + Kubernetes,在PHP中加载和启用扩展或模块

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

当我使用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”已更新,但我看不到模块已启用。

我可以做什么?很感谢

php docker kubernetes php-extension kubernetes-helm
1个回答
1
投票

问题是您的docker CMD是运行php-fpm

https://github.com/docker-library/php/blob/bb16de8a711d1ba1dc76adf4665b3b1c06a06922/7.3/stretch/fpm/Dockerfile#L266

并且在容器启动后你无法更改加载到内存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

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