Ваши команды pipe, как не конечный пункт назначения, буферизируют вывод. В конце концов он появится, но только когда накопится достаточно много вывода или команда ping завершится.
Вы можете использовать ping -c 5 google.com
, чтобы установить определенное количество пакетов, которые будут отправлены, после чего ping завершится. Ваш вывод вернется, и трубы будут работать, как ожидалось.
Редактирование: другой обходной путь использует stdbuf
, чтобы избежать буферизации труб и awk
, чтобы избежать внутренней cut
буферизации и позволяет пингу работать непрерывно:
ping www.google.com | stdbuf --output=0 awk '{print $1}' | tee /tmp/file
Is there something which a docker container can't be used for while a Linux virtual machine can?
Конечно. Контейнер — это просто процесс :, он не может вести себя как другой процессор, не может загружать другое ядро и не может запускать другую операционную систему. Виртуальная машина может делать все эти вещи. Поскольку все состояние виртуальной машины сохраняется внутри гипервизора, ее можно приостановить/возобновить, перенести на другие физические хосты и выполнить аналогичные действия, которые затруднительны или невозможны при использовании существующей технологии контейнеров.
Is it correct that if you require a Linux kernel version different from the host's, you can only use a virtual machine not a docker container?
Верно. Контейнеры — это просто процессы, работающие в ядре хоста, точно так же, как и неконтейнерные -процессы на хосте.
In particular, Docker and VirtualBox seem to put KVM/QEMU at disadvantage.
У них разные варианты использования. В зависимости от того, что вы хотите сделать, любая технология может оказаться лучшим выбором.