我有一个基于nginx的小型测试应用程序,我想在docker容器中运行。所以我按照这里给出的示例进行docker安装
所以我有一个更名为 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测试2 ,然后重新启动容器。我执行以下命令以验证Docker容器中的内容确实已更改
docker exec engine2 cat /usr/share/nginx/html/index.html
和预期的一样,该文件读取 Docker Test 2 。但是,当我使用curl命令查看网页是否也反映了更改时,我仍然可以得到 Docker Test 1 作为响应。index.html反映了更改,但是当我运行curl命令或从浏览器访问该应用程序时,仍会得到相同的结果。我尝试了以下方法,但无济于事。
我不知道为什么会这样。
因此,我发现了VirtualBox VM的一个已知错误,该错误用于在Mac上运行Docker。当我们在主机和VirtualBox之间共享内容时,只有我们会遇到此错误。就诸如nginx,apache(显然是vertx)之类的Web服务器而言,存在一种优化。每当我们从服务器请求静态文件时,它都会使用 sendfile 为我们提供文件。错误是在VirtualBox的情况下(在上述情况下),无论尝试什么,我们始终会获得文件的第一个版本。对于Nginx和apache,此问题的解决方法是关闭sendfile。但是,就vertx而言,我们使用了一种技巧。
有关此错误的更多信息,请参考以下内容
链接1
链接2
链接3
链接4