Intereting Posts
Выходные данные команды `tty` и файла` / dev / tty` оба ссылаются на управляющий терминал текущего процесса bash? Как я могу генерировать узкополосные спектры из командной строки? скользящее окно JPG из тысяч файлов Почему моя файловая система установлена ​​как доступная только для чтения? Переменная PATH сбрасывается после закрытия и повторного открытия сеанса SSH Как повторить команду, когда в файле есть определенная строка? Как надежно и прозрачно отслеживать выполнение процесса Как исправить поврежденное выполнение bash в подстановке команд? Есть ли способ проверить успешность конкретной команды Настройка оболочки OpenSSH для любого / любого подключаемого имени пользователя Ассиметрические проблемы маршрутизации в LINUX Определение виртуальных хостов Centos apache Почему я не могу удалить пустой каталог с именем пользователя www-data? Как переместить файлы в подкаталоги по счету? Сценарий Bash. Создать инструмент тестирования обезьян

Прозрачны ли контейнеры для отношений между родительским и дочерним процессами POSIX?

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

cat foo.txt | sed ... | xargs some-command 

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

Можно ли реализовать такую ​​оболочку прозрачным образом, чтобы процессы не знали, что каждый работает в контейнере и может использовать каналы UNIX, отправлять сигналы и т. Д.?

    Если я понимаю, что вы спрашиваете, я не понимаю, почему это невозможно, если контейнеры на разных границах каналов правильно принимают STDIN и выводят все через STDOUT.

    Вы в основном спрашиваете это:

     $ cat.txt |  |  | ... 

    Это должно работать.

    пример

    Здесь у меня есть docker-контейнер, который ничего не делает, кроме как запустить этот скрипт:

     $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 28c19c338e6e sleeper "/tmp/run.sh" 6 days ago Up 4 minutes focused_lumiere 

    И сценарий внутри:

     $ docker exec -it 28c19c338e6e cat /tmp/run.sh #!/bin/bash while true; do sleep 30; done 

    Теперь, если бы мы запускали такие команды:

     $ docker exec -it 28c19c338e6e bash -c "echo hi" | \ docker exec -i 28c19c338e6e bash -c "grep hi" hi $ 

    И если бы нам пришлось grep что-то еще:

     $ docker exec -it 28c19c338e6e bash -c "echo hi" | \ docker exec -i 28c19c338e6e bash -c "grep bye" $ 

    Каждая из этих команд docker выполняет соответствующую команду внутри контейнера, но они передают ввод / вывод через STDIN / STDOUT с оболочкой Bash и каналами, на которых я их запускаю.