Helm + Kubernetes,在PHP中加载并启用扩展或模块 [英] Helm + Kubernetes, load and enable extensions or modules in PHP

查看:196
本文介绍了Helm + Kubernetes,在PHP中加载并启用扩展或模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用kubernetes运行php部署时出现问题,因为不加载模块或扩展库.

i've problem when i run a php deployment with kubernetes becouse don't load the modules or extensions libraries.

我的部署文件是这样:

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是这样的:

And my ConfigMap is this:

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"已更新,但是我看不到启用的模块.

Later i go into the Pod with command "exec -it" and i put again "docker-php-ext-enable mysqli" to check it, but i receive the message "warning: mysqli (mysqli.so) is already loaded!", but when i run the "phpinfo()" command, i see "upload_max_filesize = 100M" and "post_max_size = 100M" updated, but i can't see modules enabled.

我能做什么?非常感谢

What i can do? very thank's

推荐答案

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

The problem is that your docker CMD is to run php-fpm

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

并且在容器启动之后,您无法将加载更改为内存php配置.

and after container started you cannot change loaded to memory php configuration.

您需要重新启动php-fpm才能应用更改,但是重新启动会杀死容器,并且您放弃所有更改.要为php添加一些库,您应该创建自己的docker映像并将所有库安装到该映像中,而不是在运行时安装它.

You need to restart php-fpm to apply changes, but restart kills container and you loose all changes. To add some libraries for php you should to create your own docker image and install all your libraries into the image instead of installing it in runtime.

在github上也检查此问题 https://github.com/docker-library/php/issues/331

Check also this issue on github https://github.com/docker-library/php/issues/331

所以答案是创建自己的映像并使用docker RUN命令安装所有必需的扩展

So answer is to create your own image and install all required extensions with docker RUN command

FROM php:7-fpm

RUN apt-get install php-pdo php-mysql 

之后,您必须构建此图像

After that you have to build this image

docker build -t php:7-fpm-mysql .

将其推送到某些Docker注册表中.例如hub.docker.com

push it to some docker registry. For example hub.docker.com

docker push php:7-fpm-mysql

注意:自PHP 5.5.*起,不建议使用php mysql扩展名,请改用PDO

NOTE: php mysql extension is deprecated since PHP 5.5.*, use PDO instead

这篇关于Helm + Kubernetes,在PHP中加载并启用扩展或模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆