【发布时间】:2020-04-05 18:53:25
【问题描述】:
我正在开发一个我想在 php-apache docker 容器中托管的网站。
我使用以下命令来运行容器:
docker run -dit --restart unless-stopped --name my_www -p 8080:80 -v /path/to/repo:/var/www/html/ php:7.4-apache
由于我将包含代码的存储库作为卷绑定到容器,因此我希望当我在本地更改代码时网站能够“实时更新”。上次尝试时我的行为正确,但现在无法恢复。
当我在 127.0.0.1 本地检查网站时,一切正常,并且通常会考虑更改,但它们不会传播到 docker 容器中...
由于某种原因,docker 中的文件被卡在旧版本的代码上,即存储库的旧“stat”...
有什么想法可以解决这个问题并实时预览更改吗?
【问题讨论】:
-
When I check the website locally at 127.0.0.1- 这是否意味着您的机器上已经运行了另一个 Web 服务器,在 Docker 之外,并且 docroot 为/path/to/repo?并且与http://127.0.0.1:8080的Docker服务器中的内容不匹配? -
我使用 Brackets IDE 进行开发,它具有预览功能,可以打开一个新选项卡,例如:
http://127.0.0.1:37329/。通过这种方式,我看到了实时变化。但是,当查看 127.0.0.1:8080(或 public_ip:8080)查看 docker 版本时,它不会实时更新。现在看它已更新,但我昨天进行了更改,所以我在两者之间重新启动了我的计算机,看起来这以某种方式强制了 docker 内部的更新,但我想要的是在不重新启动的情况下实时更新。 -
会不会是 Apache 或您的浏览器缓存旧文件?您是否尝试过从容器内部/外部检查磁盘上的文件(例如
docker exec container ls -l /path/to/changed/file/检查时间戳,或cat以查看您的更改是否存在)?这里有很多关于更改未传播 (example) 的问题,它们中的任何一个有帮助吗? -
嗯,有趣,我按照你的建议做了,发现 docker 容器中的时区错误(2 小时班次,它设置为 UTC,但我在法国)但我不喜欢这是一个问题,因为文件已更新,内容已实时更新,但更改在浏览器上不可见。对我来说,这表明 Apache 正在缓存文件,不是吗?
-
如您所说,容器中的时区与此处无关,只是时间戳显示文件正在正确更新。在浏览器中点击重新加载是否显示正确的内容?这绝对意味着它正在被浏览器或服务器缓存。您的浏览器的开发工具也会显示这一点 - 检查网络选项卡,并检查未刷新内容的请求。至少在 Chrome 中,有一个“禁用缓存”复选框,确保没有选中。浏览器缓存的响应将在 Size col 中显示有关“缓存”的信息。 304 表示服务器缓存。