2015-09-28 46 views
0

我一直在玩docker一段時間。最近,我遇到了一個「錯誤」,我無法確定原因/原因。在vm中沒有得到真正的文件更新

我目前在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

注意兩兩件事:

  1. 多餘的驚歎號是不是有
  2. 的EOF標誌移動,空格的數量,出現在EOF標誌前面,正是感嘆號的數量。

我懷疑操作系統不知何故拿起文件大小的變化,但未能挑選新的內容。當我從文件中刪除字符時,EOF標誌也會移動,並且貓的輸出將被我刪除的字符數刪除。

這不僅是cat沒有拿起變化,vm中的所有程序都做。因此,當它發生時我無法開發任何東西。我所做的更改根本不會影響任何內容。我必須殺死虛擬機並重新啓動它才能獲得我所做的任何更改,但效率並不高。

任何幫助將不勝感激!感謝您閱讀長問題!

+0

該屏幕截圖取自virtualbox boot2docker外殼,不在任何容器內。 – prM

+0

我縮小到基本圖像。我嘗試了官方的python:2.7.10和python:3.4.3圖像,並且它們都能很好地工作(能夠拾取文件更改)。但是,在構建我自己的圖像時,我使用gliderlabs/alpine:3.2作爲我的基本圖像,以實現最小圖像大小。這樣做會帶來我上面描述的問題。 (在容器和boot2docker虛擬機相同的問題) – prM

回答

0

我假設你安裝app.py 作爲文件,使用類似

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

可悲的是,容器將不承認對文件的更改安裝的方式。 嘗試將該文件放入文件夾,然後改爲裝入文件夾。然後對該文件的更改將在容器中可見。

假設應用程序。PY位於$(pwd)/work,嘗試用

-v $(pwd)/work:/work 

運行容器和調整正在運行的命令到你的代碼爲/work/app.py

+0

感謝您的答覆,但不幸的是我的問題是不是真正直接相關的碼頭。碼頭工人我很好。問題是vm沒有得到更新的文件。無論如何,謝謝你的時間! – prM