为了账号安全,请及时绑定邮箱和手机立即绑定

仅当容器重新启动时,本地更改才会传播到 docker 容器

仅当容器重新启动时,本地更改才会传播到 docker 容器

PHP
江户川乱折腾 2021-11-13 16:09:18
我已经创建了一个 repo,用于在 PHP7.3 上使用 Docker 设置 WP,在 php-fpm 上使用最新的 WordPress,我遇到了同样的问题:https : //github.com/dingo-d/wordpress-docker你可以检查一下,看看可能是什么问题。我的猜测是 PHP-FPM 必须是问题所在(因为重新启动该容器会使更改传播)。我按照我在此处找到的教程创建了一个 WordPress docker 本地开发环境。基本上,我所有的 docker 东西都位于.docker文件夹中。我在.docker文件夹中有这些文件|--project-folder|____.docker| |____php-fpm| | |____php.ini| | |____Dockerfile| |____nginx| | |____Dockerfile| | |____logs| | | |____error.log| | | |____access.log| | |____certs| | | |____dev.project.com.key| | | |____dev.project.com.crt| | |____scripts| | | |____docker-nginx-entrypoint.sh| | |____nginx.conf| |____.dockerignore| |____.env| |____docker-compose.yml| |____.env.example在尝试使用自签名 SSL 证书设置所有内容后,我可以登录https://localhost:8443(我在设置主机文件时https://dev.project.com遇到了一些问题,以便我可以访问,但这是另一个问题)。问题是,当我去更改我的主题中的某些内容时,比如添加一个print_r应该只打印出一些内容的语句,只有在我重新启动 WordPress 应用程序容器后,我才能在 WP 管理员中看到该更改。文件夹被映射,当我在本地更改内容并执行到容器时,这些更改会立即存在(当我在容器中执行时删除它们时,它们会立即在我的编辑器中删除)。我已经测试过我在网上找到的一个超级简单的 WordPress Docker 设置是否会发生同样的事情version: '3'services:   db:     image: mysql:5.7     volumes:       - db_data:/var/lib/mysql     restart: always     environment:       MYSQL_ROOT_PASSWORD: password       MYSQL_DATABASE: wordpress       MYSQL_USER: user       MYSQL_PASSWORD: password   app:     depends_on:       - db     image: wordpress:latest     ports:       - "8000:80"     restart: always     volumes:       - ./wp-content/:/var/www/html/wp-content     environment:       WORDPRESS_DB_HOST: db:3306       WORDPRESS_DB_USER: user       WORDPRESS_DB_PASSWORD: passwordvolumes:    db_data:当我启动它并转到localhost:8000我可以立即看到更改而无需重新启动容器(当我在编辑器中编辑文件时)。
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

所以事实证明,罪魁祸首是opcache. 或者更确切地说,我在网上找到了一些例子,只是将它添加到我的,php.ini而没有试图理解这实际上意味着什么。

在阅读了这篇文章这篇解释了一些 opcache 设置的优秀文章后,我意识到我的php.ini文件有

opcache.revalidate_freq=60

不应该在本地开发环境中使用它!

使用 with 时opcache.validate_timestamps,PHP 会检查revalidate_freq设置并将其用作时间戳 - 如果您在 60 秒内发出请求(如上面的示例),代码将从 opcache 中提取 - 您将不会在浏览器中看到任何更改. 只有在 60 秒后才能看到此更改。

所以将它设置为 0(检查每个请求的代码)可以解决这个问题。

故事要点:检查所有内容并阅读您使用的每个设置!

对我来说“不幸的是”我正在阅读 nginx 配置,因为我认为我在那里搞砸了一些东西😁


查看完整回答
反对 回复 2021-11-13
  • 1 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信