Не получить реальное обновление файла в 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 вещи:
- лишних восклицательных знаков нет
- перемещенный знак 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
,