Если я понимаю, о чем вы спрашиваете, я не понимаю, почему это было бы невозможно, если контейнеры на разных границах каналов должным образом принимают STDIN и выдают все через STDOUT.
Вы, по сути, спрашиваете об этом:
$ cat.txt | <container 1 app> | <container 2 app> |...
Это должно сработать.
Здесь у меня есть док-контейнер, который не делает ничего, кроме запуска этого скрипта:
$ 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 и каналами, на которых я их запускаю.
Is there any way to stop it?
К сожалению, нет.
Обоснование заключается в следующем :когда системе полностью не хватает памяти, она должна зависнуть, потому что она не может выполнить даже самую простую команду -, поскольку для этого потребовалось бы выделение памяти. OOM-Killer предназначен для предотвращения того, чтобы система стала полностью непригодной для использования таким образом, убивая (на основе некоторых эвристических-других, можно сказать, случайных )процессов для освобождения памяти. Таким образом, администратор может, по крайней мере, попытаться вернуть систему в рабочее состояние, желательно без перезагрузки. Полное отключение этой функции не реализовано (см. также этот ответ на StackOverflow).
Чтобы решить проблему, попробуйте
top
или любой аналогичный системный монитор, чтобы выяснить, какая программа начинает потреблять память. Если это тот, который вы написали сами, возможно, вы создали ошибки в управлении памятью, которые вы можете попытаться отследить с помощью таких инструментов, как valgrind
. Если это сторонняя -программа, вы можете попробовать ограничить ее ресурсы (см. ответы на этот вопрос , например ), чтобы она хотя бы не влияла на вашу систему в Общая. Если ваше оборудование в конечном итоге не соответствует поставленной задаче, возможно, вам придется подумать об обновлении.