从Electron-Vue前端启动Docker后端

4

我正在基于Electron Vue构建一个应用程序。我的Electron应用程序应该从Docker容器中启动其后端。为此,我调用一个包含docker run命令的bash文件。

    const {spawn} = require('child_process')
    const dckrrn = spawn('sh', dockercall)

    dckrrn.stdout.on('data', (data) => {
      console.log(`stdout: ${data}`)
    })

    dckrrn.stderr.on('data', (data) => {
      console.log(`stderr: ${data}`)
    })

    dckrrn.on('close', (code) => {
      console.log(`child process exited with code ${code}`)
    })

在开发模式下一切正常,但当我尝试在打包的应用程序中运行它时,它会出现错误:

stderr: pathtobashscript.sh line 13 docker: command not found.

似乎由于某种原因,生成的子进程不知道系统上安装了 Docker。我做错了什么?实现这个的正确方法是什么?我应该尝试使用 execfile 函数吗?感谢您的时间!

PS: 很抱歉我无法提供可重现的示例,该带有后端的应用程序大小约为 7GB。

PPS: 一些有趣的侧面说明:

which docker

不返回任何内容,并且:

pwd

返回:/

PPPS:我尝试在bash脚本开头包含docker路径,但没有成功:

PATH="/usr/local/bin/docker:${PATH}"

导出路径

4PS: 我通过在环境中添加shell:true来成功运行docker。现在我的问题是docker文件夹映射不再起作用了。所以我想我也必须以某种方式使它们对环境可见。

const {spawn} = require('child_process')
const dckrrn = spawn('sh', dockercall, {
  env: {
    shell: true
  }
})
1个回答

1
通过在env中添加shell: true解决:
const {spawn} = require('child_process')
const dckrrn = spawn('sh', dockercall, {
  env: {
    shell: true
  }
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接