Не получить реальное обновление файла в VM

Я давно играл с докером. Недавно я столкнулся с "ошибкой", которая не может определить причину / причину.

В настоящее время я нахожусь на Windows 8.1 и имею установленный набор инструментов для докера, который включает в себя Docker 1.8.2, Docker-Machine 0.4.1 и Virtualbox 5.0.4 (предположительно, они являются важными). Я имел обыкновение быть с чистым boot2docker.

Я не совсем уверен в том, что происходит, поэтому описание может быть расплывчатым и бесполезным, пожалуйста, попросите у меня разъяснений, если вам нужно. Вот так:

Когда я пишу в некоторые файлы, которые находятся в общих папках, виртуальная машина получает только обновление длины файла, но не может получить новый контент.

Давайте использовать мой 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')

и когда я его кошку в вм

Теперь давайте обновим его до следующего, обратите внимание на дополнительные восклицательные знаки:

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, в точности равно количеству восклицательных знаков.

Я подозреваю, что ОС как-то подобрала изменение размера файла, но не смогла выбрать новый контент. Когда я удаляю символы из файла, знак EOF также перемещается, и вывод cat обрезается точно на то количество символов, которое я удалил.

Это не только cat что не удается получить изменения, все программы в VM делают. Поэтому я не могу ничего развить, когда это происходит. Изменения, которые я делаю, просто ни на что не влияют. И я должен убить виртуальную машину и раскрутить ее снова, чтобы получить какие-либо изменения, которые я делаю, не так эффективно.

Любая помощь будет оценена! Спасибо за чтение длинного вопроса!

2 ответа

Решение

Похоже, это известная проблема.

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

какие ссылки на

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

Спасибо Matt Aitchison за ответ на мою проблему с github в https://github.com/gliderlabs/docker-alpine/issues/84

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,

Другие вопросы по тегам