调用docker exec时,NodeJS Spawn不会退出

时间:2018-03-20 12:01:44

标签: node.js docker process tty

我尝试使用NodeJS docker exec运行childProcess.spawn命令,但过程永远不会退出"。我已经尝试了pty.js这样的库,但这些库从未发出"退出"任

我在命令中添加了-t,虽然这确实改变了输出以获得全彩色支持,但它仍然没有触发"退出"事件

我的完整命令: docker exec -it frontend-container gulp build

这是我正在运行的代码。 this.terminal.spawn只需在spawn库上调用pty.js

const cProcess = this.terminal.spawn(cmd, matches);

cProcess.on('data', (data) => {
  console.log('data', data);
});

cProcess.on('exit', (data) => {
  console.log('Exit');
});

完全调用data事件,但永远不会调用exit。这是使用pty.js框架。

1 个答案:

答案 0 :(得分:0)

当存在于命令中的进程存在时,

Docker exec退出。 例如

docker exec -it admin ash -c "ls /"

enter image description here

如果您的流程有点像拖尾日志,那么它只会退出ctrl+c

例如

docker exec -it admin ash -c "pm2 logs"

在我们的CI测试中,我们只需致电

docker exec -t nodejs ash -c "cd /opt/nodejs/ ; npm test"

现在,当从npm test命令退出触发器时,exec将退出。 这就是我们在nodejs处理的方式

 var gulp = require('gulp');
var mocha = require("gulp-mocha");

gulp.task("buildTests", function () {
  return gulp.src([
    "./test/build/test*.js"
  ]).pipe(mocha({exit: true}));
});

检查这些链接

https://github.com/gulpjs/gulp/issues/411

exit gulp when build is finished

https://github.com/gulpjs/gulp/issues/903

http://derrickbowen.com/blog/content/stop-gulp-build-unit-test-failure https://www.npmjs.com/package/docker-exec

https://www.npmjs.com/package/docker-cli-js