尝试调试在Win7上运行vboxmange的docker-machine的问题。 无法使用docker-machine,因为它无法捕获vboxmanage命令的输出(生成了一个单独的窗口来运行VBoxManage命令)。
使用以下测试执行代码运行vboxmange命令,它将生成一个新窗口,因此stdout为空;
package main
import (
"bytes"
"fmt"
"log"
"os/exec"
)
func main() {
cmd := exec.Command("C:\\Program Files\\Oracle\\VirtualBox\\vboxmanage.exe", "--version")
//cmd := exec.Command("C:\\Program Files\\Docker Toolbox\\docker.EXE", "help")
var stdout bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Printf("StdOut: %q\n", stdout.String())
}
如果我运行docker命令(上面已注释),则该命令运行时不会生成新窗口,并且捕获了输出。
仅供参考,我正在使用VBoxManage 5.2.8r121009版本
我意识到这可能与我的Win7环境有关,但是我找不到解决方案-感激不尽!
编辑: 如果我在同一提示符下运行VBoxManage命令并重定向到文件-它可以正常工作,因此非常令人困惑!
EDIT2: 这不是golang的问题,因为我也可以在python中重新创建问题。 从同一命令行再次可以正常工作,“ vboxmanage.exe --version> output.txt”在同一cmd窗口中运行,但是在下面运行此代码片段时会产生一个新窗口;
import subprocess
result = subprocess.run(['C:\\Program Files\\Oracle\\VirtualBox\\vboxmanage.exe', '--version'], stdout=subprocess.PIPE)
print('stdout:', result.stdout)
所以这一定是VBoxmanage的问题! (删除了go标签)
EDIT3:
我已经与Docker和Oracle一起开了票,但我希望不大...
答案 0 :(得分:0)
该问题似乎是环境问题,而不是docker,virtual box或Windows的原因。 请参阅主题; https://github.com/docker/machine/issues/4548
我发现不是炭黑导致系统出现问题!
CB日志文件(confer.log)非常有用,因此我仔细研究了它们。 当启动vboxmanage时,我注意到docker-machine和我的vboxtest.exe都被拦截,而vboxmanage被windows \ system32 \ pmlauncher.exe运行了,谷歌搜索表明这是AVG,但如果您检查的是文件则不是描述为“ 用于Windows启动器的BeyondTrust PowerBroker ”。
有一个BeyondTrust PowerBroker服务,所以我停止了此服务,然后vboxtest.exe和docker-machine命令都可以工作...
<stopped beyond trust>
C:\temp>testvbox
StdOut: "5.2.16r123759\r\n"
<started beyond trust>
C:\temp>testvbox
StdOut: ""