如何在docker上更新wordpress

dphi5xsq  于 2023-03-01  发布在  WordPress
关注(0)|答案(7)|浏览(162)

我正在运行一个php-fpm的wordpress容器。
wordpress源文件安装在与Nginx容器共享的命名卷"wordpress"中。
除了我需要将wordpress更新到新版本时,一切都运行良好。命名卷内的代码持续存在。对于命名卷来说,这是正常的...
我可以手动删除卷,但一定有更好的方法。
我的停靠文件:

FROM wordpress:4.9.5-php5.6-fpm-alpine

我的docker-compose. yml

version: '3.1'

services:

  php:
    build: ./docker/php/
    restart: unless-stopped
    volumes:
      - wordpress:/var/www/html
      - ./web/wp-content/:/var/www/html/wp-content/
      - ./web/wp-config.php:/var/www/html/wp-config.php

    environment:
      - DEBUG=${DEBUG:-0}
      - MYSQL_USER=$MYSQL_USER
      - MYSQL_PASSWORD=$MYSQL_PASSWORD
      - MYSQL_DATABASE=$MYSQL_DATABASE

  nginx:
    image: nginx:1-alpine
    restart: unless-stopped
    expose:
      - 80
    volumes:
      - wordpress:/var/www/html
      - ./web/wp-content/:/var/www/html/wp-content/
      - ./docker/nginx/site.conf:/etc/nginx/conf.d/default.conf
      - ./docker/nginx/wordpress.conf:/etc/nginx/wordpress.conf
    environment:
      - VIRTUAL_HOST=localhost

  mysql:
    image: mysql:5.6
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
      - MYSQL_USER=$MYSQL_USER
      - MYSQL_PASSWORD=$MYSQL_PASSWORD
      - MYSQL_DATABASE=$MYSQL_DATABASE
    volumes:
      - mysql:/var/lib/mysql

volumes:
  wordpress: {}
  mysql: {}

networks:
  default:
    external:
      name: wordpress

期待阅读您的建议
谢谢

p5fdfcr1

p5fdfcr11#

当wordpress容器出现时,它会检查/var/www/html中是否存在文件,如果不存在,它会复制文件,所以你可以更新entrypoint脚本,检查wp-includes/version.php中的wordpress版本,检查/var/www/html中的wordpress版本,检查容器中的文件,然后决定替换新文件。

    • 编辑:**

根据这一点,只要删除index.phpwp-includes/version.php就应该再次从容器中复制文件。或者,您可以更新您的entrypoint脚本,以便始终将文件复制到/var/www/html,但如果您选择缩放wordpress层,则可能会导致问题。

1hdlvixo

1hdlvixo2#

谢谢你的帮助,成功了,这是我用的代码。
我覆盖了dockerfile中的入口点

COPY check-wordpress-version.sh /usr/local/bin/

ENTRYPOINT ["check-wordpress-version.sh"]

这里是www.example.com的内容check-wordpress-version.sh来检查wordpress的当前版本。

VOLUME_VERSION="$(php -r 'require('"'"'/var/www/html/wp-includes/version.php'"'"'); echo $wp_version;')"
echo "Volume version : "$VOLUME_VERSION
echo "WordPress version : "$WORDPRESS_VERSION

if [ $VOLUME_VERSION != $WORDPRESS_VERSION ]; then
    echo "Forcing WordPress code update..."
    rm -f /var/www/html/index.php
fi

docker-entrypoint.sh php-fpm
1zmg4dgp

1zmg4dgp3#

Wordpress似乎已经在this issue下解决了这个问题。
我注意到您正在使用一个定制的wp-config.php。最有可能的是,您可以使用WORDPRESS_CONFIG_EXTRA来实现这一点,而不是挂载wp-config.php
理论上(根据上面的链接),更新图像应该更新数据库,但我还没有确认。
基于此,我的stack.yml/docker-compose.yml如下所示:

environment:
      WORDPRESS_CONFIG_EXTRA: |
        define( 'AUTOMATIC_UPDATER_DISABLED', true );
    volumes:
      - "./themes:/var/www/html/wp-content/themes/"
      - "./plugins:/var/www/html/wp-content/plugins/"
      - "./uploads:/var/www/html/wp-content/uploads/"
bpsygsoo

bpsygsoo4#

  • 这是更简单的解决方法 *

你必须编辑wp-config.php文件添加define('FS_METHOD','direct');到文件的末尾。保存文件并运行更新。从现在起,你不需要FTP服务器来更新你的WordPress。

记住!更新前请进行备份:)

juzqafwq

juzqafwq5#

为了进一步解释@Bigbenny的回答,我的Dockerfile看起来如下所示:

FROM wordpress:latest

WORKDIR /var/www/html

COPY . /var/www/html

COPY check-wordpress-version.sh /usr/local/bin/

RUN chmod 755 /usr/local/bin/check-wordpress-version.sh

ENTRYPOINT ["/usr/local/bin/check-wordpress-version.sh"]

这里需要注意两件事:
1.我必须chmod 755该文件,否则将收到权限被拒绝的错误
1.我将脚本放在/usr/local/bin中,因为出于某种原因,当我只使用ENTRYPOINT["check-wordpress-version.sh"]时,容器找不到该文件。
我还稍微调整了一下脚本,看起来像这样:

#!/bin/sh

VOLUME_VERSION="$(php -r 'require('"'"'/var/www/html/wp-includes/version.php'"'"'); echo $wp_version;')"
echo "Volume version : "$VOLUME_VERSION
echo "WordPress version : "$WORDPRESS_VERSION

if [ $VOLUME_VERSION != $WORDPRESS_VERSION ]; then
    echo "Forcing WordPress code update..."
    rm -f /var/www/html/index.php
    rm -f /var/www/html/wp-includes/version.php
fi

docker-entrypoint.sh apache2-foreground

对于我的用例,我必须使用apache2-foreground而不是php-fpm;我还删除了/var/www/html/wp-includes/version.php文件。
最后,在我的docker-compose中,不使用image指令;我用的是build: ./wordpress
希望这能有所帮助!😁

rseugnpd

rseugnpd6#

我的答案适用于官方的docker wordpress image。所以可能离题了,但可能会对某些人有所帮助。
如果您使用的是docker-compose,则可以使用此命令提取最新的映像。

docker pull wordpress

我相信这将更新你的核心docker图像。任何其他本地项目,你docker-compose up -d与此yml图像设置,因为这将使用最新的更新。

services:
    wordpress:
      image: wordpress:latest

如果您当前正在运行映像,则需要使用docker-compose downdocker-compose up -d来调用更新。

bxgwgixi

bxgwgixi7#

更容易解决。
您必须通过add define('FS_METHOD','direct')编辑wp-config.php文件;到文件末尾。保存文件并运行更新。从现在起,你不需要FTP服务器来更新你的WordPress。记住!更新前做好备份

相关问题