Проблема с автоматическим завершением процесса

Если я понимаю, о чем вы спрашиваете, я не понимаю, почему это было бы невозможно, если контейнеры на разных границах каналов должным образом принимают 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 и каналами, на которых я их запускаю.

0
11.08.2020, 14:46
1 ответ

Is there any way to stop it?

К сожалению, нет.

Обоснование заключается в следующем :когда системе полностью не хватает памяти, она должна зависнуть, потому что она не может выполнить даже самую простую команду -, поскольку для этого потребовалось бы выделение памяти. OOM-Killer предназначен для предотвращения того, чтобы система стала полностью непригодной для использования таким образом, убивая (на основе некоторых эвристических-других, можно сказать, случайных )процессов для освобождения памяти. Таким образом, администратор может, по крайней мере, попытаться вернуть систему в рабочее состояние, желательно без перезагрузки. Полное отключение этой функции не реализовано (см. также этот ответ на StackOverflow).

Чтобы решить проблему, попробуйте

  1. Используйте topили любой аналогичный системный монитор, чтобы выяснить, какая программа начинает потреблять память. Если это тот, который вы написали сами, возможно, вы создали ошибки в управлении памятью, которые вы можете попытаться отследить с помощью таких инструментов, как valgrind. Если это сторонняя -программа, вы можете попробовать ограничить ее ресурсы (см. ответы на этот вопрос , например ), чтобы она хотя бы не влияла на вашу систему в Общая.
  2. Попробуйте изменить настройки убийцы OOM, например. чрезмерное выделение , но учтите, что это может иметь побочные эффекты.
  3. Увеличьте пространство подкачки (, см. комментарий Ipor Sircer ), но учтите, что это сильно замедлит работу системы.

Если ваше оборудование в конечном итоге не соответствует поставленной задаче, возможно, вам придется подумать об обновлении.

1
18.03.2021, 23:13

Теги

Похожие вопросы