node.js - 调用 docker exec 时 NodeJS Spawn 不退出

标签 node.js docker process tty

我正在尝试运行 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 /"

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

关于node.js - 调用 docker exec 时 NodeJS Spawn 不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49383694/

相关文章:

javascript - 如何遍历数组并将每次迭代写入同一个文件 [nodejs]

javascript - 从表单中获取输入,从数据库中检索数据并显示输出

docker - 可以分享一下 Docker 容器吗?

docker - 如何通过已设置管理员凭据的docker-compose启动gitlab-ce容器?

javascript - Node.js 行被跳过然后被处理

node.js - npm 错误!代码 EMFILE npm ERR!系统调用产生 git npm ERR!路径 git npm ERR!错误号 EMFILE npm 错误!生成 git EMFILE

spring - 将环境变量传递给 DOCKER Spring Boot

c# - 从 Windows 窗体应用程序向 EXE 传递多个参数

c - 显示按状态过滤的进程的系统调用

process - 如何设置质量检查部门?