Как заставить колбу правильно перезагрузить с помощью хоста докера? - PullRequest
0 голосов
/ 18 июня 2019

Как мне заставить колбу правильно перезагрузиться внутри узла подключения томов докера?

У меня есть следующее приложение фляги и файл docker-compose

---
services:

  flask:
    image: domain/my-flask:latest
    environment:
      - FLASK_DEBUG=1
    volumes:
     - "server.py:/app/server.py"

С приложением «Привет, мир»:

from flask import Flask
import os

app = Flask(__name__)

print('Change Me')

@app.route('/')
def hello_world():
    return 'Hello, World!'

app.run(host='0.0.0.0', port=80)

В настоящее время изменение «измени меня» на «было изменено», я вижу вывод «измени меня».

При третьем изменении я увижу «был изменен».

1 Ответ

0 голосов
/ 18 июня 2019

Первое, что нужно понять, это то, что когда вы создаете монтирование тома из одного файла с вашего хоста в контейнер, вы по существу отображаете явный inode файла в контейнер. Многие редакторы, такие как vim или pycharm, используют файлы подкачки, которые копируют рабочие файлы поверх целевого файла, изменяя свой идентификатор inode. Для наиболее последовательных результатов рекомендуется следующее:

1: отключите «использовать безопасную запись» в редакторах, таких как vim или pycharm.

2: смонтировать целевой каталог вместо одного файла.

3: Установить переменную ENV: PYTHONUNBUFFERED = 1 (Это указывает Docker не буферизовать вывод из Python в стандартный выходной буфер)

4: установить сторожевой таймер Werkzeug. Это более эффективный прослушиватель на основе inotify, который будет запускаться при помощи колбы, если он установлен в системе.

докер-compose.yml

---
services:

  flask:
    image: domain/my-flask:latest
    environment:
      - PYTHONUNBUFFERED=1
      - FLASK_ENV=development
      - FLASK_DEBUG=1
    volumes:
     - ".:/app"      #you can replace '.' with a full dir path

requirements.txt

watchdog==0.9.0
Werkzeug==0.15.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...