Docker 重启未显示预期效果
Docker restart not showing the desired effect
我有一个基于 nginx 的小型测试应用程序,我想将其 运行 放入 docker 容器中。所以我按照这里给出的例子 docker installation
所以我有一个文件夹名称 restartTest,它包含一个 index.html 文件,其中有一行 Docker测试1。我在 docker 容器的 运行 时间内将其安装为我的卷。所以我使用的命令是
docker run -dP -v /Users/Sachin/restartTest/:/usr/share/nginx/html --name engine2 nginx
运行没问题。我使用 curl 来验证卷是否已正确安装并且应用程序正在按需要 运行ning。现在我要做的是将 index.html 文件 (从我的本地主机)的内容更改为 Docker test 2 然后我重新启动容器。我执行下面的命令来验证docker容器
里面的内容确实发生了变化
docker exec engine2 cat /usr/share/nginx/html/index.html
正如预期的那样,文件显示为 Docker 测试 2。但是,当我使用 curl 命令查看网页是否也反映了更改时,我发现我仍然得到 Docker Test 1作为回应。 index.html 反映了更改,但是当我 运行 curl 命令或者如果我从浏览器访问应用程序时,我仍然得到相同的结果。我尝试了以下但无济于事。
- 重启服务
- 停止和启动容器
- 停止并启动 boot2docker 虚拟机和 docker 守护进程。
我不知道为什么会这样。
我认为这是一个缓存问题。您是否尝试在 index.html
位置配置中设置 expires -1
以禁用静态文件的服务器端缓存?
所以我在 Mac 上发现了用于 运行 Docker 的 VirtualBox VM 的这个已知错误。
当我们在主机和 VirtualBox 之间共享内容时,只有我们会面临这个错误。就像 nginx、apache(显然还有 vertx)这样的 Web 服务器而言,有一个优化。每当我们从服务器请求静态文件时,它都会使用 sendfile 为我们提供文件。错误是,在 VirtualBox 的情况下(在上述场景中),无论我们尝试什么,我们总是得到文件的第一个版本。对于 nginx 和 apache,解决方法是关闭 sendfile。但是,就 vertx 而言,我们使用了一个 hack。
- 重命名文件说 login.html 到 login.html.moved (anything)
- curl :/……/login.html(我们什么也得不到)
- 将文件重命名回原来的名称 login.html。移至 login.html
- 硬刷新页面(Command + Shift + R)。
要进一步阅读有关此错误的信息,请参阅以下内容
我有一个基于 nginx 的小型测试应用程序,我想将其 运行 放入 docker 容器中。所以我按照这里给出的例子 docker installation
所以我有一个文件夹名称 restartTest,它包含一个 index.html 文件,其中有一行 Docker测试1。我在 docker 容器的 运行 时间内将其安装为我的卷。所以我使用的命令是
docker run -dP -v /Users/Sachin/restartTest/:/usr/share/nginx/html --name engine2 nginx
运行没问题。我使用 curl 来验证卷是否已正确安装并且应用程序正在按需要 运行ning。现在我要做的是将 index.html 文件 (从我的本地主机)的内容更改为 Docker test 2 然后我重新启动容器。我执行下面的命令来验证docker容器
里面的内容确实发生了变化docker exec engine2 cat /usr/share/nginx/html/index.html
正如预期的那样,文件显示为 Docker 测试 2。但是,当我使用 curl 命令查看网页是否也反映了更改时,我发现我仍然得到 Docker Test 1作为回应。 index.html 反映了更改,但是当我 运行 curl 命令或者如果我从浏览器访问应用程序时,我仍然得到相同的结果。我尝试了以下但无济于事。
- 重启服务
- 停止和启动容器
- 停止并启动 boot2docker 虚拟机和 docker 守护进程。
我不知道为什么会这样。
我认为这是一个缓存问题。您是否尝试在 index.html
位置配置中设置 expires -1
以禁用静态文件的服务器端缓存?
所以我在 Mac 上发现了用于 运行 Docker 的 VirtualBox VM 的这个已知错误。 当我们在主机和 VirtualBox 之间共享内容时,只有我们会面临这个错误。就像 nginx、apache(显然还有 vertx)这样的 Web 服务器而言,有一个优化。每当我们从服务器请求静态文件时,它都会使用 sendfile 为我们提供文件。错误是,在 VirtualBox 的情况下(在上述场景中),无论我们尝试什么,我们总是得到文件的第一个版本。对于 nginx 和 apache,解决方法是关闭 sendfile。但是,就 vertx 而言,我们使用了一个 hack。
- 重命名文件说 login.html 到 login.html.moved (anything)
- curl :/……/login.html(我们什么也得不到)
- 将文件重命名回原来的名称 login.html。移至 login.html
- 硬刷新页面(Command + Shift + R)。
要进一步阅读有关此错误的信息,请参阅以下内容