2016-09-22 114 views
1

我在CoreOS(主机)中运行Docker容器,并在容器的文件夹中装载了一个主机文件夹。现在当主机文件夹内容发生变化时自动重启Docker容器

docker run -v /home/core/folder_name:/folder_name <container_name> 

,每次我改变时间(insert/delete)在主文件夹(folder_name)某些文件,我需要重新启动容器(container_name)看到效果。

docker restart <container_name> 

有没有从主机侧面或码头侧任何方式时,有该文件夹中的变化(insert/delete)自动重新启动呢?

回答

2

重新启动码头容器的文件夹更改与首先-v命令的整个概念相反。如果你真的真的需要以你建议的方式重新启动容器,那么唯一的方法就是从码头主机。有一些工具可以用来监视主机文件夹,当插入或删除文件时,可以触发docker restart <container_name>命令。这些工具是incroninotify-toolsHere是另一个有人问到与你相似的问题,并且使用我建议的工具之一推荐了答案。

现在,主机文件夹中的文件也不会在Docker容器中更改。它必须是在启动后,您在Docker容器中使用的程序不会更新/folder_name文件夹的视图。是否有可能强制您在Docker容器中运行的程序进行刷新或更新? -v命令通过绑定安装工作,并且在docker中一直是一个稳定的功能。使用绑定安装,home/core/folder_name文件夹IS(用于所有实际目的)与容器中的/folder_name相同的文件夹。

运行

docker run -t -i -v /home/core/folder_name:/folder_name <container_name> /bin/sh

此命令使您在容器内交互的shell命令。在这个shell发出命令:

cd /folder_name; touch a_file

现在去在外壳或某些文件浏览器泊坞窗主机上的/ home /核心/文件夹名。文件a_file将在那里。您可以删除主机上的该文件,然后返回运行在Docker容器中的shell并运行ls /folder_name。文件a_file不会在那里。

因此,您需要使用inotify或incron来随时在主机上更改文件时重新启动容器,或者了解如何使用您在Docker容器中运行的程序来更新其视图/folder_name文件夹。

+0

我明白了你的观点。现在另一个问题是在coreos中安装inotify。它没有python或gcc。 –

+0

你应该可以使用coreos的包管理器来安装python和gcc。理论上,如果这是你要采取的方法,你应该写一个dockerfile来安装所有的软件。 [这里](https://docs.docker.com/engine/reference/builder/)是dockerfiles的文档。 – gpwclark

+0

这个答案能帮助你理解你面临的问题吗? – gpwclark

相关问题