我正在运行一个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
期待阅读您的建议
谢谢
7条答案
按热度按时间p5fdfcr11#
当wordpress容器出现时,它会检查
/var/www/html
中是否存在文件,如果不存在,它会复制文件,所以你可以更新entrypoint
脚本,检查wp-includes/version.php
中的wordpress版本,检查/var/www/html
中的wordpress版本,检查容器中的文件,然后决定替换新文件。根据这一点,只要删除
index.php
或wp-includes/version.php
就应该再次从容器中复制文件。或者,您可以更新您的entrypoint
脚本,以便始终将文件复制到/var/www/html
,但如果您选择缩放wordpress
层,则可能会导致问题。1hdlvixo2#
谢谢你的帮助,成功了,这是我用的代码。
我覆盖了dockerfile中的入口点
这里是www.example.com的内容check-wordpress-version.sh来检查wordpress的当前版本。
1zmg4dgp3#
Wordpress似乎已经在this issue下解决了这个问题。
我注意到您正在使用一个定制的
wp-config.php
。最有可能的是,您可以使用WORDPRESS_CONFIG_EXTRA
来实现这一点,而不是挂载wp-config.php
。理论上(根据上面的链接),更新图像应该更新数据库,但我还没有确认。
基于此,我的
stack.yml
/docker-compose.yml
如下所示:bpsygsoo4#
你必须编辑
wp-config.php
文件添加define('FS_METHOD','direct');
到文件的末尾。保存文件并运行更新。从现在起,你不需要FTP服务器来更新你的WordPress。记住!更新前请进行备份:)
juzqafwq5#
为了进一步解释@Bigbenny的回答,我的Dockerfile看起来如下所示:
这里需要注意两件事:
1.我必须
chmod 755
该文件,否则将收到权限被拒绝的错误1.我将脚本放在
/usr/local/bin
中,因为出于某种原因,当我只使用ENTRYPOINT["check-wordpress-version.sh"]
时,容器找不到该文件。我还稍微调整了一下脚本,看起来像这样:
对于我的用例,我必须使用
apache2-foreground
而不是php-fpm
;我还删除了/var/www/html/wp-includes/version.php
文件。最后,在我的docker-compose中,不使用
image
指令;我用的是build: ./wordpress
。希望这能有所帮助!😁
rseugnpd6#
我的答案适用于官方的docker wordpress image。所以可能离题了,但可能会对某些人有所帮助。
如果您使用的是
docker-compose
,则可以使用此命令提取最新的映像。我相信这将更新你的核心docker图像。任何其他本地项目,你
docker-compose up -d
与此yml图像设置,因为这将使用最新的更新。如果您当前正在运行映像,则需要使用
docker-compose down
和docker-compose up -d
来调用更新。bxgwgixi7#
更容易解决。
您必须通过add define('FS_METHOD','direct')编辑wp-config.php文件;到文件末尾。保存文件并运行更新。从现在起,你不需要FTP服务器来更新你的WordPress。记住!更新前做好备份