细节
我想在容器上运行一个进程而不实际执行它。这是因为容器可能没有安装所有的包来运行命令。就像如果我想运行一个stress
命令,那么我可能在容器中找不到压力并且必须单独安装它。
我检查了几种可能性,我发现一种方法是使用nsenter
.
问题
我有一个 Nginx 容器,我想在其上运行压力过程而不实际执行它。
- 我获取了
pid
容器(1212)并尝试运行以下命令:
# nsenter -t 1212 -i -p -n -u
# hostname
nginx-86c57db685-q47lq
我检查了我得到了正确的主机名。但是,如果我使用-m
or-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
它不会给容器 ID 为 1212 的目标容器提供 CPU 峰值,而是占用同一主机。
那么,有没有办法在不运行命令的情况下运行类似目标容器stress
或在目标容器上运行的进程?我也试图检查并为此。dd
exec
cgexec
cgroups