[英]The pdo_mysql extension is not detected on Wordpress Docker container
我已經使用Docker安裝了多個Wordpress網站,特別是Evert Ramos的這個Docker Wordpress Let's Encrypt repo。
盡管可以輕松便捷地部署所需的多個Wordpress安裝,但仍然存在一些問題和不足,例如sendmail()
函數(然后您必須安裝SMTP插件才能解決電子郵件發送問題)。
我發現的主要問題是,安裝了此WPvivid插件用於備份Wordpress后,出現以下錯誤消息:
未檢測到pdo_mysql擴展名。 請先安裝擴展程序。
我已經用pdo_mysql
搜索了如何為Wordpress容器或在Nginx容器內安裝pdo_mysql
擴展。 但是,我只找到了關於如何安裝的答案,但僅針對PHP容器。
Evert Ramos的回購協議不使用任何PHP容器,因此我還沒有發現如何或在何處安裝該pdo_mysql
擴展。
這是我其中一個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}
關於如何安裝該擴展程序的任何想法,或者可以解決該問題的人員?
(我在解決該問題的方法上的有用鏈接: 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 )
按照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"]
而且我只修改了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}
執行docker-compose up -d
后,出現以下錯誤:
[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
您在此堆棧中使用的wordpress
映像是Docker Hub的默認映像,並且它們具有有關如何安裝新PHP擴展的非常詳細的文檔。
首先,我們必須在docker-compose.yml
文件上進行一些更改,以進行新的wordpress
自定義構建:
wordpress:
depends_on:
- db
container_name: ${CONTAINER_WP_NAME}
# image: wordpress:latest
build: ./wordpress
其次, 在此處創建一個名為Dockerfile和WordPress默認映像的docker-entrypoint.sh的新文件,並將其放在wordpress
目錄中。 將一些魔術代碼修改為wordpress/Dockerfile
文件:
RUN docker-php-ext-install pdo pdo_mysql
現在,您有了具有PDO_MYSQL擴展名的自定義Docker堆棧,並能夠運行備份過程。
編輯后堆棧的配置: https : //github.com/tdtgit/stackoverflow57447284
如果需要幫助,請隨時發表評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.