Как обновить WordPress на докере - PullRequest
0 голосов
/ 01 мая 2018

Я использую php-fpm контейнер WordPress.

Исходные файлы wordpress монтируются в именованный том «wordpress», совместно используемый с контейнером Nginx.

Все работает хорошо, кроме случаев, когда мне нужно обновить WordPress до новой версии. Код внутри именованного тома сохраняется. Это нормально для именованного тома ...

Я мог бы вручную удалить том, но должен быть лучший способ.

Мой dockerfile:

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

Мой докер-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

Ждем ваших предложений

Спасибо

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Спасибо за вашу помощь. Это сработало. Вот код, который я использую.

Я переопределяю точку входа в dockerfile

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

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

Вот содержимое файла 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
0 голосов
/ 12 мая 2019

Wordpress, похоже, решил эту проблему в этой проблеме .

Я заметил, что вы используете пользовательский 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/"
0 голосов
/ 01 мая 2018

Когда появляется контейнер WordPress, он проверяет наличие файлов в /var/www/html и копирует, только если его нет. Так что в вашем случае вы можете обновить entrypoint скрипт, чтобы проверить версию WordPress в wp-includes/version.php в /var/www/html и файлах в контейнере, а затем принять решение о замене новых файлов.

Edit:

Согласно это , просто удаление index.php или wp-includes/version.php должно снова скопировать файлы из контейнера. Или вы можете обновить скрипт entrypoint для постоянного копирования файлов в /var/www/html, но это может вызвать проблемы, если вы решите масштабировать слой wordpress.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...