Tag:

无法使用Go客户端从Docker访问stdout

我有一个小的项目,我的go服务器将通过http发送的C文件复制到Docker容器中,在那里它们被编译和运行。 但是,我无法获得任何数据发送到容器中的标准输出。 我已经确定该文件被发送到Docker容器,更重要的是,任何编译问题都会显示在错误stream中。 然而,在C程序中通过stderr发送数据也没有显示任何结果,直到我有玩Dockerfile,使用'>&2回声“”'以某种方式推送数据通过stream,我能够读取它。 现在,如上所述,我只能阅读stderr,只能感谢一个解决方法。 任何想法,为什么我不能用标准方法做到这一点? 去服务器 package main import ( "fmt" "net/http" "io" "os" "os/exec" "log" "encoding/json" "github.com/docker/docker/client" dockertypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "golang.org/x/net/context" "time" "bytes" ) type Result struct { CompilationCode int RunCode int TestsPositive int TestsTotal int } func upload(w http.ResponseWriter, r *http.Request) { log.Println("method:", r.Method) if r.Method == "POST" { log.Println("Processing new SUBMISSION.") […]

如何将stdout从docker容器redirect到主机

我试图从主机系统调用docker的mysqldump保存从golang的mysql转储。 它可以与主机mysqldump正常工作,但不能与docker的mysqldump一起工作。 func writeDb(dbName string) { var mysqldumpPath string = "/usr/bin/mysqldump" //var mysqldumpPath string = "/Applications/MAMP/Library/bin/mysqldump" //cmd := exec.Command(mysqldumpPath, fmt.Sprintf("-u%s", USER), fmt.Sprintf("-p%s", PASSWORD) , dbName) cmd := exec.Command("docker", "exec", "some-mysql", mysqldumpPath, fmt.Sprintf("%s", USER), fmt.Sprintf("-p%s", PASSWORD) , dbName, ">", fmt.Sprintf("%s.sql", dbName)) stdout, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } if err := cmd.Start(); […]

Golang:可以肯定地说,如果一个结构体实现了一个方法,那么它就满足了所有定义该方法签名的接口。

在docker source repo中, image / backend.go中存在一个接口: type imageBackend interface { …. ImagesPrune(pruneFilters filters.Args) (*types.ImagesPruneReport, error) } 并且在守护进程/ prune.go中有一个实现: func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPruneReport, error) { … implementation details … } 这是否意味着说Daemon实现了imageBackend接口是正确的? 背景:我试图了解如何调用ImagesPrune docker system prune cmd调用ImagesPrune中的ImagesPrune函数。 我可以跟踪代码stream: cli/../system/prune.go -> cli/../prune/prune.go -> cli/../image/prune.go -> client/image_prune.go -> api/server/..image/image_routes.go -> api/server/../image/backend.go —–> ??? —-> daemon/prune.go 我不知道怎么回事??? 上面的部分。