【问题标题】:Node.js child_process.exec "/bin/sh: 1: docker: not found" errorNode.js child_process.exec "/bin/sh: 1: docker: not found" 错误
【发布时间】:2019-09-11 00:29:27
【问题描述】:

我使用“分子”框架创建了一个微服务。我使用 child_process.exec 在 shell 中运行 docker 命令。我收到“/bin/sh: 1: docker: not found”错误。

const { exec } = require("child_process");
.
.
.
exec("docker --version", (error, stdout, stderr) => {
   if (error) {
      console.error(`exec error: ${error}`);
      return;
   }
   console.log(`stdout: ${stdout}`);
   console.log(`stderr: ${stderr}`);
   });

尝试将绝对路径设为:

exec("/usr/bin/docker --version", (err...);

但还是出现同样的错误。

我可以使用以下方法获取节点版本:

exec("node --version", (err...);

【问题讨论】:

  • Docker 已安装在您的机器上,并且相同的 cmd 是否从 cmd 行工作?只是想在考虑其他任何事情之前确定一下。
  • 是基于alpine的镜像吗,alpine在镜像中没有sh或者bash。
  • @RohitJindal 是的,docker 安装在我的机器上,命令在终端中运行良好。
  • @AakashSharma 我从 /bin/sh 收到一个错误,提示找不到 docker。所以,sh 必须存在于我正在使用的图像中。
  • 我使用 child_process 运行 shell/docker 命令的微服务在 docker 容器内运行(在该容器中,不会安装 docker)。所以我认为它无法从该 docker 容器中访问安装在我机器上的 docker。我很困惑,因为由于某种原因,我能够运行“ls”命令来查看我机器上安装 docker 的路径中的目录内容。

标签: node.js docker microservices moleculer


【解决方案1】:

我也遇到了同样的问题。原因很简单,我构建了一个新镜像,但 Docker 客户端没有出现在我的容器中,因为我只做了 docker-compose restart <CONTAINER_NAME> 而不是 docker-compose stop <CONTAINER_NAME>docker-compose rm <CONTAINER_NAME>docker-compose up -d <CONTAINER_NAME>

https://stackoverflow.com/a/63281470/1707015

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 2020-07-28
    • 2018-06-06
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多