在vm

时间:2015-09-28 11:10:32

标签: linux windows docker virtual-machine cat

我和Docker玩了一段时间了。最近,我遇到了一个" bug"我无法确定原因/原因。

我目前在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中捕捉它时:

enter image description here

现在,让我们将其更新为以下内容,注意额外的感叹号:

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')

当我再次捕捉它时:

enter image description here

注意2件事:

  1. 额外的感叹号不存在
  2. EOF标志移动,出现在EOF标志前面的空格数正好是感叹号的数量。
  3. 我怀疑操作系统以某种方式获取了文件大小的变化,但未能选择新内容。当我从文件中删除字符时,EOF符号也会移动,并且cat输出会被我删除的字符确切地切断。

    不仅cat未能获得更改,vm中的所有程序都会执行。因此,当它发生时,我无法发展任何东西。我所做的改变根本不会影响任何事情。而且我必须杀死vm并再次将其旋转以获得我所做的任何更改,而不是那么有效。

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

2 个答案:

答案 0 :(得分:1)

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

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

链接到

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

感谢Matt Aitchisongliderlabs/docker-alpine

回复我的github问题

sync; echo 3 > /proc/sys/vm/drop_caches是临时解决方案。

永久修复似乎不会很快到来......

答案 1 :(得分:0)

我假设您使用类似

之类的东西将app.py 挂载为文件
Thread1 Thread2
      C 
      A
      A C
      C A
      S C
      S R <---- Remove and add have to be performed without Thread1 serializing 
      S A <---- anything in between (atomically) - and it has to be done without 
      S S       blocking other threads computations and serializations for long
        S       and not third thread must be allowed to start serializing in this
        S       in-between state
        S

可悲的是,容器无法识别以这种方式挂载的文件的更改。 尝试将文件放在文件夹中,然后安装文件夹。然后在容器中可以看到对该文件的更改。

假设app.py位于-v /host/path/to/app.py:/container/path/to/app.py ,请尝试使用

运行容器
$(pwd)/work

并将正在运行的命令调整为-v $(pwd)/work:/work