一尘不染

Docker重新启动未显示出预期的效果

docker

我有一个基于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命令或从浏览器访问该应用程序时,仍会得到相同的结果。我尝试了以下方法,但无济于事。

  1. 重新启动服务
  2. 停止并启动容器
  3. 停止并启动boot2docker VM和docker守护程序。

我不知道为什么会这样。


阅读 251

收藏
2020-06-17

共1个答案

一尘不染

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

  1. 将文件login.html重命名为login.html.moved(任何内容)
  2. curl:/....../ login.html(我们什么也得不到)
  3. 将文件重命名为其原始名称login.html.moved to login.html
  4. 硬刷新页面(Command + Shift + R)。

有关此错误的更多信息,请参考以下内容

链接1

链接2

链接3

链接4

2020-06-17