我正在尝试运行 docker exec
使用 NodeJS 的命令 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
框架。
最佳答案
当命令中启动的进程存在时,Docker exec 退出。 例如
docker exec -it admin ash -c "ls /"
如果您的进程类似于拖尾日志,那么它只会退出 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
关于node.js - 调用 docker exec 时 NodeJS Spawn 不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49383694/