Запустить процесс без фактического выполнения в контейнере с помощью nsenter
Подробности
Я хотел запустить процесс в контейнере, не выполняя его. Это связано с тем, что в контейнере могут быть установлены не все пакеты для выполнения команд. Например, если я хочу запустить команду, то, возможно, я не обнаружил стресса в контейнере и мне придется устанавливать его отдельно.
Я проверил несколько возможностей сделать это и обнаружил, что один из них - использовать
nsenter
.
Проблема
У меня есть контейнер Nginx, на котором я хочу запустить стресс-процесс, не выполняя его.
- Я принес
pid
контейнера (это было 1212) и попытался выполнить следующие команды:
# nsenter -t 1212 -i -p -n -u
# hostname
nginx-86c57db685-q47lq
Я проверил, что получаю правильное имя хоста. Но если я использую
-m
или же
-r
вариант тогда получаю.
# nsenter -t 1212 -i -p -n -u -m -r
nsenter: failed to execute /bin/sh: No such file or directory
Теперь, если я запустил процесс стресса на нем:
# nsenter -t 1212 -i -p -n -u
# stress-ng -c 2
stress-ng: info: [50] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor
stress-ng: info: [50] dispatching hogs: 2 cpu
Он не дает всплеска процессора для целевого контейнера, имеющего идентификатор контейнера 1212, вместо этого он загружает тот же хост.
Итак, есть ли способ запустить такой процесс, как
stress
или же
dd
в целевом контейнере без запуска
exec
команда? Я тоже пытался проверить
cgexec
и
cgroups
за это.