Задача
Размеры изображения Docker обычно должны быть как можно меньше. Использование полноценных сред, таких как стандартное изображение Python , часто приводит к сильно раздутым изображениям со всеми установленными зависимостями. Упаковка python в автономные исполняемые файлы (например, с использованием pyinstaller) - это идеальный способ уменьшения размеров изображений и общей сложности.
Окружающая среда : python3.6
, pyinstaller==3.4
Проблема заключается в том, что python использует буферизованную stdio по умолчанию. Этого можно избежать, запустив скрипты на Python с python -u ...
. Но становится недоступным при использовании pyinstaller.
В соответствии с документами должна быть возможность добавить опции времени выполнения, такие как u
, v
и W ...
, к сгенерированному исполняемому файлу. Но, к сожалению, в действительности это не работает. И v
, и W
работают нормально, но u
, похоже, полностью игнорируется.
Следующий фрагмент показывает использование:
...
exe = EXE(...
[('u', None, 'OPTION')],
name="myapp",
...)
...
Этот флаг все еще действует? Поскольку остальные работают - он был удален без уведомления или обновления документов?
Существуют ли альтернативы для отключения буферизации stdio (с помощью pyinstaller или также извне), без изменения кода Python, например , так что ?
Зачем это нужно?
Следует избегать буферизованного ввода-вывода при запуске сервисов Docker Swarm. Чтобы заставить исполняемый файл правильно войти в систему в режиме реального времени для демона Docker, необходимо прикрепить оболочку. Но прикрепление tty-оболочки к задачам роя делает работу с журналами намного, намного более сложной, если вообще невозможной.