如何通过NodeJS代码执行Docker容器内Bash命令获取InfluxDB磁盘大小
解决Docker exec TTY错误并获取InfluxDB磁盘占用
- 错误原因:
docker exec的-it参数里,-t是用来分配伪TTY终端的,而Node.js的child_process运行在非交互环境下,没有可用的TTY设备,所以触发报错。 - 修正命令:移除
-t参数(保留-i或直接省略参数都可以,因为这里不需要交互式输入),修改后的命令为:docker exec influxdb du -sh /var/lib/influx2/engine - Node.js代码实现示例:
用exec方法的写法:
更安全的const { exec } = require('child_process'); exec('docker exec influxdb du -sh /var/lib/influx2/engine', (err, stdout, stderr) => { if (err) { console.error(`执行失败: ${err.message}`); return; } if (stderr) { console.error(`错误输出: ${stderr}`); return; } console.log('InfluxDB磁盘占用:', stdout.trim()); });execFile写法(避免shell命令注入风险):const { execFile } = require('child_process'); execFile('docker', ['exec', 'influxdb', 'du', '-sh', '/var/lib/influx2/engine'], (err, stdout, stderr) => { if (err) { console.error(`执行失败: ${err.message}`); return; } if (stderr) { console.error(`错误输出: ${stderr}`); return; } console.log('InfluxDB磁盘占用:', stdout.trim()); }); - 注意事项:
- 替换命令中的
influxdb为你的实际容器名称或ID - 确保运行Node.js的进程有执行Docker命令的权限
- 替换命令中的
内容的提问来源于stack exchange,提问作者Dragonknot
相关产品推荐
相关产品推荐

