猿问

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

我已经创建了一个 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: password

volumes:

    db_data:

当我启动它并转到localhost:8000我可以立即看到更改而无需重新启动容器(当我在编辑器中编辑文件时)。


江户川乱折腾
浏览 158回答 1
1回答

qq_笑_17

所以事实证明,罪魁祸首是opcache. 或者更确切地说,我在网上找到了一些例子,只是将它添加到我的,php.ini而没有试图理解这实际上意味着什么。在阅读了这篇文章和这篇解释了一些 opcache 设置的优秀文章后,我意识到我的php.ini文件有opcache.revalidate_freq=60您不应该在本地开发环境中使用它!使用 with 时opcache.validate_timestamps,PHP 会检查revalidate_freq设置并将其用作时间戳 - 如果您在 60 秒内发出请求(如上面的示例),代码将从 opcache 中提取 - 您将不会在浏览器中看到任何更改. 只有在 60 秒后才能看到此更改。所以将它设置为 0(检查每个请求的代码)可以解决这个问题。故事要点:检查所有内容并阅读您使用的每个设置!对我来说“不幸的是”我正在阅读 nginx 配置,因为我认为我在那里搞砸了一些东西😁
随时随地看视频慕课网APP
我要回答