没有得到真正的文件更新在虚拟机
我一直在玩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件事情:
- 额外的感叹号不在那里
- 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
。