【问题标题】:Website hosted in docker container is not updating live托管在 docker 容器中的网站未实时更新
【发布时间】: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 表示服务器缓存。

标签: php html apache docker


【解决方案1】:

感谢@Don't Panic 帮助调试。
浏览器正在缓存所有内容,因此我无法实时看到更改。
解决方案是在 docker 容器中启用“过期”apache 模块:

$ docker exec -it <container_id> bash
root@<container_id>:# a2enmod expires
root@<container_id>:# exit
$ docker restart my_www

等等 :)

【讨论】:

    猜你喜欢
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2019-12-07
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多