Docker重启未显示所需效果

时间:2015-07-26 14:37:27

标签: nginx docker boot2docker

我有一个基于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文件 (从我的localhost)的内容更改为Docker test 2 ,然后重新启动容器。我执行以下命令来验证Docker容器内的内容确实已更改

docker exec engine2 cat /usr/share/nginx/html/index.html

正如预期的那样,该文件读取 Docker Test 2 。但是,当我使用curl命令查看网页是否也反映了更改时,我发现仍然会将 Docker Test 1 作为响应。 index.html反映了更改,但是当我运行curl命令或者从浏览器访问应用程序时,我仍然得到相同的结果。我尝试过以下但无济于事。

  1. 重新启动服务
  2. 停止并启动容器
  3. 停止并启动boot2docker VM和docker守护程序。
  4. 我不知道为什么会这样。

2 个答案:

答案 0 :(得分:2)

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

  1. 将文件重命名为login.html to login.html.moved(anything)
  2. curl:/ ... ... / login.html(我们不会得到任何东西)
  3. 将文件重命名为其原始名称login.html.moved to login.html
  4. 硬刷新页面(Command + Shift + R)。
  5. 有关此错误的进一步阅读,请参阅以下

    Link1

    Link2

    Link3

    Link4

答案 1 :(得分:0)

我认为这是一个缓存问题。您是否尝试在expires -1位置配置中设置index.html以禁用静态文件的服务器端缓存?