Helm + Kubernetes, загрузить и включить расширения или модули в PHP - PullRequest
2 голосов
/ 12 марта 2019

У меня проблема, когда я запускаю развертывание 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

Позже я захожу в Pod с командой "exec -it" и снова ставлю "docker-php-ext-enable mysqli", чтобы проверить это, но я получаю сообщение "предупреждение": mysqli (mysqli.so) уже загружен! ", но когда я запускаю команду" phpinfo () ", я вижу" upload_max_filesize = 100M "и" post_max_size = 100M ", но я не вижу включенных модулей.

Что я могу сделать?очень благодарна

1 Ответ

1 голос
/ 12 марта 2019

Проблема в том, что ваша док-станция CMD запускает php-fpm

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

, и после запуска контейнера вы не можете перейти в конфигурацию php памяти.

Вам нужно перезапустить php-fpm, чтобы применить изменения, но перезапуск убивает контейнер, и вы теряете все изменения.Чтобы добавить несколько библиотек для php, вам нужно создать свой собственный образ докера и установить все свои библиотеки в образ вместо его установки во время выполнения.

Проверьте также эту проблему на github https://github.com/docker-library/php/issues/331

Таким образом, ответ - создать свой собственный образ и установить все необходимые расширения с помощью команды RUN 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

...