简体   繁体   English

在Wordpress Docker容器上未检测到pdo_mysql扩展

[英]The pdo_mysql extension is not detected on Wordpress Docker container

I have installed several Wordpress websites by using Docker, specifically this Docker Wordpress Let's Encrypt repo by Evert Ramos. 我已经使用Docker安装了多个Wordpress网站,特别是Evert Ramos的这个Docker Wordpress Let's Encrypt repo。

While it makes it easy and fast to deploy as many Wordpress installations as you want, there're still some issues and lacks, such as the sendmail() function (then you have to install an SMTP plugin to work around the email sending). 尽管可以轻松便捷地部署所需的多个Wordpress安装,但仍然存在一些问题和不足,例如sendmail()函数(然后您必须安装SMTP插件才能解决电子邮件发送问题)。

The main issue I have found is that, after having installed this WPvivid plugin for backing up Wordpress, I get the following error message: 我发现的主要问题是,安装了此WPvivid插件用于备份Wordpress后,出现以下错误消息:

The pdo_mysql extension is not detected. 未检测到pdo_mysql扩展名。 Please install the extension first. 请先安装扩展程序。

I have googled how to install the pdo_mysql extension for a Wordpress container or inside the Nginx container. 我已经用pdo_mysql搜索了如何为Wordpress容器或在Nginx容器内安装pdo_mysql扩展。 However, I only have found answers about how to install it but for a PHP container. 但是,我只找到了关于如何安装的答案,但仅针对PHP容器。

The Evert Ramos ' repos do not use any PHP container, so I haven't found out how or where to install that pdo_mysql extension. Evert Ramos的回购协议不使用任何PHP容器,因此我还没有发现如何或在何处安装该pdo_mysql扩展。

Here is my docker-compose.yml file of one of the Wordpress sites: 这是我其中一个Wordpress网站docker-compose.yml文件:

    services:
        db_projects:
          container_name: ${CONTAINER_DB_NAME}
          image: mariadb:10.4
          restart: unless-stopped
          volumes:
            - ${DB_PATH}:/var/lib/mysql
          environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}

        wp_projects:
          depends_on:
            - db_projects
          container_name: ${CONTAINER_WP_NAME}
          image: wordpress:latest
          restart: unless-stopped
          volumes:
            - ${WP_CORE}:/var/www/html
            - ${WP_CONTENT}:/var/www/html/wp-content
            - ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
          environment:
            WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME}:3306
            WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
            WORDPRESS_DB_USER: ${MYSQL_USER}
            WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
            WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
            VIRTUAL_HOST: ${DOMAINS}
            LETSENCRYPT_HOST: ${DOMAINS}
            LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
          logging:
            options:
          max-size: ${LOGGING_OPTIONS_MAX_SIZE:-200k}
    pma_projects:
      image: phpmyadmin/phpmyadmin
      restart: unless-stopped
      container_name: pma_projects
      links:
        - db_projects
      ports:
        - ${PMA_PORT}:80
      environment:
        #MYSQL_USERNAME: root
        #MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        PMA_HOST: db_projects
        PMA_PORT: 3306
        #PMA_USER: ${MYSQL_USER}
        #PMA_PASSWORD: ${MYSQL_PASSWORD}
        PMA_ARBITRARY: 1
      depends_on:
        - wp_projects
        - db_projects

#   wpcli:
#     image: tatemz/wp-cli
#     volumes:
#       - ${WP_CORE}:/var/www/html
#       - ${WP_CONTENT}:/var/www/html/wp-content
#     depends_on:
#       - db
#     entrypoint: wp

networks:
    default:
       external:
         name: ${NETWORK}

Any ideas on how to install that extension or somebody who can shed some light to solve this? 关于如何安装该扩展程序的任何想法,或者可以解决该问题的人员?

(my useful links on my way to solve it: https://docs.docker.com/samples/library/wordpress/ & https://github.com/docker-library/wordpress/blob/c9f1ca12b6fa8181dee161dfc5ce1692eeaef1d1/php7.2/apache/Dockerfile | https://github.com/docker-library/wordpress/blob/c9f1ca12b6fa8181dee161dfc5ce1692eeaef1d1/php7.3/fpm/Dockerfile ) (我在解决该问题的方法上的有用链接: https : //docs.docker.com/samples/library/wordpress/&https : //github.com/docker-library/wordpress/blob/c9f1ca12b6fa8181dee161dfc5ce1692eeaef1d1/php7.2/ apache / Dockerfile | https://github.com/docker-library/wordpress/blob/c9f1ca12b6fa8181dee161dfc5ce1692eeaef1d1/php7.3/fpm/Dockerfile

Following Anh Tuan's answer, my dockerfile is as follows: 按照Anh Tuan的回答,我的dockerfile如下:

FROM php:7.3-fpm

# install the PHP extensions we need (https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions)
RUN set -ex; \
    \
    savedAptMark="$(apt-mark showmanual)"; \
    \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        libjpeg-dev \
        libmagickwand-dev \
        libpng-dev \
        libzip-dev \
    ; \
    \
    docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr; \
    docker-php-ext-install -j "$(nproc)" \
        bcmath \
        exif \
        gd \
        mysqli \
        opcache \
        zip \
                pdo_mysql \
    ; \
    pecl install imagick-3.4.4; \
    docker-php-ext-enable imagick; \
    \
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
    apt-mark auto '.*' > /dev/null; \
    apt-mark manual $savedAptMark; \
    ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
        | awk '/=>/ { print $3 }' \
        | sort -u \
        | xargs -r dpkg-query -S \
        | cut -d: -f1 \
        | sort -u \
        | xargs -rt apt-mark manual; \
    \
    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
    rm -rf /var/lib/apt/lists/*

# set recommended PHP.ini settings
# see https://secure.php.net/manual/en/opcache.installation.php
RUN { \
        echo 'opcache.memory_consumption=128'; \
        echo 'opcache.interned_strings_buffer=8'; \
        echo 'opcache.max_accelerated_files=4000'; \
        echo 'opcache.revalidate_freq=2'; \
        echo 'opcache.fast_shutdown=1'; \
    } > /usr/local/etc/php/conf.d/opcache-recommended.ini
# https://wordpress.org/support/article/editing-wp-config-php/#configure-error-logging
RUN { \
# https://www.php.net/manual/en/errorfunc.constants.php
# https://github.com/docker-library/wordpress/issues/420#issuecomment-517839670
        echo 'error_reporting = E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_RECOVERABLE_ERROR'; \
        echo 'display_errors = Off'; \
        echo 'display_startup_errors = Off'; \
        echo 'log_errors = On'; \
        echo 'error_log = /dev/stderr'; \
        echo 'log_errors_max_len = 1024'; \
        echo 'ignore_repeated_errors = On'; \
        echo 'ignore_repeated_source = Off'; \
        echo 'html_errors = Off'; \
    } > /usr/local/etc/php/conf.d/error-logging.ini

VOLUME /var/www/html

ENV WORDPRESS_VERSION 5.2.2
ENV WORDPRESS_SHA1 3605bcbe9ea48d714efa59b0eb2d251657e7d5b0

RUN set -ex; \
    curl -o wordpress.tar.gz -fSL "https://wordpress.org/wordpress-${WORDPRESS_VERSION}.tar.gz"; \
    echo "$WORDPRESS_SHA1 *wordpress.tar.gz" | sha1sum -c -; \
# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress
    tar -xzf wordpress.tar.gz -C /usr/src/; \
    rm wordpress.tar.gz; \
    chown -R www-data:www-data /usr/src/wordpress

COPY docker-entrypoint.sh /usr/local/bin/

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["php-fpm"]

And I only modified the docker-compose.yml file for creating the Wordpress image with the mysql_pdo extension: 而且我只修改了docker-compose.yml文件来创建带有mysql_pdo扩展名的Wordpress图像:

version: '3'

services:
    db_projects:
      container_name: ${CONTAINER_DB_NAME}
      image: mariadb:10.4
      restart: unless-stopped
      volumes:
        - ${DB_PATH}:/var/lib/mysql
      environment:
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        MYSQL_DATABASE: ${MYSQL_DATABASE}
        MYSQL_USER: ${MYSQL_USER}
        MYSQL_PASSWORD: ${MYSQL_PASSWORD}

    wp_projects:
      depends_on:
        - db_projects
      container_name: ${CONTAINER_WP_NAME}
      #image: wordpress:latest
      build: ./wordpress
        #context: .
        #dockerfile: Custom-Wp-Dockerfile
      restart: unless-stopped
      volumes:
        - ${WP_CORE}:/var/www/html
        - ${WP_CONTENT}:/var/www/html/wp-content
        - ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
      environment:
        WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME}:3306
        WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
        WORDPRESS_DB_USER: ${MYSQL_USER}
        WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
        WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
        VIRTUAL_HOST: ${DOMAINS}
        LETSENCRYPT_HOST: ${DOMAINS}
        LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
      logging:
        options:
          max-size: ${LOGGING_OPTIONS_MAX_SIZE:-200k}
    pma_projects:
      image: phpmyadmin/phpmyadmin
      restart: unless-stopped
      container_name: pma_projects
      links:
        - db_projects
      ports:
        - ${PMA_PORT}:80
      environment:
        #MYSQL_USERNAME: root
        #MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        PMA_HOST: db_projects
        PMA_PORT: 3306
        #PMA_USER: ${MYSQL_USER}
        #PMA_PASSWORD: ${MYSQL_PASSWORD}
        PMA_ARBITRARY: 1
      depends_on:
        - wp_projects
        - db_projects

#   wpcli:
#     image: tatemz/wp-cli
#     volumes:
#       - ${WP_CORE}:/var/www/html
#       - ${WP_CONTENT}:/var/www/html/wp-content
#     depends_on:
#       - db
#     entrypoint: wp

networks:
    default:
       external:
         name: ${NETWORK}

After executing docker-compose up -d I get the following error: 执行docker-compose up -d后,出现以下错误:

[pathros@projects wp]$ sudo docker-compose up -d Building wp_projects Step 1/12 : FROM php:7.3-apache 7.3-apache: Pulling from library/php 1ab2bdfe9778: Pulling fs layer 1448c64389e0: Pulling fs layer 4b8a4e62b444: Pulling fs layer 9eb9d1e8e241: Waiting d20b2d19292c: Waiting 023060ea5930: Waiting a7fa99bc84ac: Waiting 084397ea0b0b: Waiting 27f2e3242e8a: Waiting c53d955b925a: Waiting 55a8a68dea39: Waiting b78786d44570: Waiting 69dd7e866b60: Waiting 2907cf87b0bb: Waiting ERROR: Service 'wp_projects' failed to build: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/aa/aa4bdc74350b45a805ad9bdd39ec2cc38cd604a432e447497c3103ad0a8115d8/data?verify=1568225825-5P%2BOlgyxV6p%2FjAXyu%2BTLKCEU5RM%3D : EOF [pathros @ projects wp] $ sudo docker-compose up -d Building wp_projects步骤1/12:从php:7.3-apache 7.3-apache:从库/ php中拉出1ab2bdfe9778:拉出fs层1448c64389e0:拉出fs层4b8a4e62b444:拉出fs层9eb9d1e8e241:等待d20b2d19292c:等待023060ea5930:等待a7fa99bc84ac:等待084397ea0b0b:等待27f2e3242e8a:等待c53d955b925a:等待55a8a68dea39:等待b78786db:70b https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/aa/aa4aadcbc74350b45a805ad9bdd39ec2cc38cd604a432e447497c3103ad0a8115d8/data?verify=1568225825-5P%2BOlgyxV6p%2FJDC:2EU

Your wordpress image used in this stack is default image of Docker Hub and they have very detail documentation of how to install new PHP extension. 您在此堆栈中使用的wordpress映像是Docker Hub的默认映像,并且它们具有有关如何安装新PHP扩展的非常详细的文档。

First we have to edit some changes on your docker-compose.yml file to make new wordpress custom build: 首先,我们必须在docker-compose.yml文件上进行一些更改,以进行新的wordpress自定义构建:

wordpress:
     depends_on:
       - db
     container_name: ${CONTAINER_WP_NAME}
     # image: wordpress:latest
     build: ./wordpress

Second, create a new file called Dockerfile and docker-entrypoint.sh of WordPress default image here , place it inside wordpress directory. 其次, 在此处创建一个名为Dockerfile和WordPress默认映像的docker-entrypoint.sh的新文件,并将其放在wordpress目录中。 Amend some magic code to wordpress/Dockerfile file: 将一些魔术代码修改为wordpress/Dockerfile文件:

RUN docker-php-ext-install pdo pdo_mysql

Now you have your custom Docker stack with PDO_MYSQL extension and able to run your backup process. 现在,您有了具有PDO_MYSQL扩展名的自定义Docker堆栈,并能够运行备份过程。

Your stack's config after edit: https://github.com/tdtgit/stackoverflow57447284 编辑后堆栈的配置: https : //github.com/tdtgit/stackoverflow57447284

Feel free to comment if you need help. 如果需要帮助,请随时发表评论。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM