我有一个基于nginx的小型测试应用程序,我想在docker容器中运行。所以我按照这里给出的示例docker installation

所以我有一个名字 restartTest ,它包含一个index.html文件,其中包含这行代码,上面写着 Docker Test 1 。我在运行时将其作为docker容器的卷安装。所以我用的命令是

docker run -dP -v /Users/Sachin/restartTest/:/usr/share/nginx/html --name engine2 nginx

而且运行良好。我使用curl来验证该卷是否已正确安装,并且该应用程序正在根据需要运行。现在,我要做的是将index.html文件(来自我的本地主机)的内容更改为Docker test 2 ,然后重新启动容器。我执行以下命令以验证Docker容器中的内容确实已更改
docker exec engine2 cat /usr/share/nginx/html/index.html

如预期的那样,该文件将读取 Docker Test 2 。但是,当我使用curl命令查看网页是否也反射(reflect)了更改时,我仍然可以看到Docker Test 1 作为响应。 index.html反射(reflect)了更改,但是当我运行curl命令或从浏览器访问该应用程序时,仍会得到相同的结果。我尝试了以下方法,但无济于事。
  • 重新启动服务
  • 停止并启动容器
  • 停止并启动boot2docker VM和docker守护程序。

  • 我不知道为什么会这样。

    最佳答案

    因此,我发现了VirtualBox VM的一个已知错误,该错误用于在Mac上运行Docker。
    当我们在主机和VirtualBox之间共享内容时,只有我们会遇到此错误。就诸如nginx,apache(以及显然是vertx)的Web服务器而言,存在一种优化。每当我们从服务器请求静态文件时,它都会使用 sendfile 向我们提供文件。错误是在VirtualBox的情况下(在上述情况下),无论尝试什么,我们总是获得文件的第一个版本。对于Nginx和apache,此问题的解决方法是关闭sendfile。但是,就vertx而言,我们使用了一种技巧。

  • 将文件“login.html”重命名为login.html.moved(任何内容)
  • curl:/…... / login.html(我们什么也得不到)
  • 将文件重命名为其原始名称login.html。移至login.html
  • 硬刷新页面(Command + Shift + R)。

  • 有关此错误的更多信息,请引用以下内容

    Link1

    Link2

    Link3

    Link4

    07-27 19:15