没有得到真正的文件更新在虚拟机

我一直在玩docker游戏。 最近,我遇到了一个“错误”,我找不出原因/原因。

我目前在Windows 8.1上,并安装了docker工具箱,其中包括docker 1.8.2,docker-machine 0.4.1和virtualbox 5.0.4(推测这些是重要的)。 我曾经是纯粹的boot2docker。

我不确定发生了什么,所以说明可能是模糊的,无益的,如果你需要的话,请问我澄清。 开始了:

当我写入共享文件夹中的某些文件时,vm只获取文件长度更新,但不能获取新内容。

让我们以我的app.py为例(我一直在玩瓶子)

app.py:

from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy from werkzeug.contrib.fixers import LighttpdCGIRootFix import os app = Flask(__name__) app.config.from_object(os.getenv('APP_SETTINGS')) app.wsgi_app = LighttpdCGIRootFix(app.wsgi_app) db = SQLAlchemy(app) @app.route('/') def hello(): return "My bio!" if __name__ == '__main__': app.run(host='0.0.0.0') 

当我在vm中find它时:

在这里输入图像说明

现在,让我们更新到下面,注意额外的感叹号:

 from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy from werkzeug.contrib.fixers import LighttpdCGIRootFix import os app = Flask(__name__) app.config.from_object(os.getenv('APP_SETTINGS')) app.wsgi_app = LighttpdCGIRootFix(app.wsgi_app) db = SQLAlchemy(app) @app.route('/') def hello(): return "My bio!!!!!!!" if __name__ == '__main__': app.run(host='0.0.0.0') 

当我再次捕捉它时:

在这里输入图像说明

注意2件事情:

  1. 额外的感叹号不在那里
  2. EOF标志被移动,EOF标志前面出现的空格数正好是感叹号的数量。

我怀疑操作系统不知何故拿起文件大小的变化,但没有select新的内容。 当我从文件中删除字符时,EOF标志也会移动,并且cat输出被删除了多less个字符。

这不仅是cat没有拿起变化,所有的程序都在vm上。 因此,当它发生时,我什么也不能发展。 我所做的改变根本不影响任何东西。 而且我必须杀死虚拟机,然后再重新启动才能获得我所做的任何更改,而不是那么高效。

任何帮助将不胜感激! 感谢您阅读长期的问题!

看起来这是一个已知的问题。

https://github.com/gliderlabs/pagebuilder/issues/2

哪个链接

https://forums.virtualbox.org/viewtopic.php?f=3&t=33201

感谢Matt Aitchison在gliderlabs / docker-alpine回复我的github问题

sync; echo 3 > /proc/sys/vm/drop_caches sync; echo 3 > /proc/sys/vm/drop_caches是临时修复。

永久修复似乎不会很快来临…

我假设你把app.py 作为一个文件 ,使用类似的东西

 -v /host/path/to/app.py:/container/path/to/app.py 

可悲的是,容器将无法识别以这种方式安装的文件的更改。 尝试将文件放在一个文件夹中,而不是装入文件夹 。 然后对该文件的更改将在容器中可见。

假设app.py位于$(pwd)/work ,请尝试运行容器

 -v $(pwd)/work:/work 

并将正在运行的命令调整为/work/app.py