我正在基于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
}
})