Tag:

Docker SDK获取networking接口以及ifindex

即使这个问题已经在几个不同的地方得到解答,但是还没有完整的答案。 其中一个问题是, 找出哪个networking接口属于docker集装箱 在Docker论坛上有一个关于这个的讨论 ,我也在下面添加了一些引用。 我正在尝试将dockernetworking接口映射到主机中的接口。 当docker容器启动时,它会创buildveth对,并将一个对等体放在主机的桥上,另一端放在docker容器中,如下所示。 这些接口之间的关系只是来自这些接口的ifindex。 如果我能得到主机vethxxx接口的vethxxx ,并将其与ifindex中的接口的ifindex比较,我可以build立相关性。 为了做到这一点,我必须访问find容器内的networking接口的ifindex, 为了做到这一点,我必须执行下面的事情, docker exec -it my-container cat /sys/class/net/eth1/iflink 为了做到这一点,必须保证一个容器中有一个shell可用。 有没有办法使用docker客户端(Go Lang Docker客户端)并列出容器内的networking接口,并获得这些接口的相应ifindexes。 与这些ifindexes ,然后我可以得到主机的接口。 如果这样的事情是不可能的,我可以读取正在运行的docker集装箱内的文件,或者复制到主机,使用给定的API客户端泊坞 下面更多的相关链接, docker0和eth0有什么关系? https://www.oreilly.com/learning/what-is-docker-networking#example-bridge-mode-networking

无法在Docker容器中捕获SIGINT

我有以下图像 FROM golang:1.8.3 WORKDIR /go/src/x/x/program RUN mkdir /logs VOLUME ["/go/src/x/x/program", "/logs"] CMD ["sh", "-c", "go install && program"] 我的Go服务器以下面的方式监听SIGINT // … Other stuff c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { <-c signal.Stop(c) // Server graceful shutdown err := s.Shutdown(context.Background()) if err != nil { fileLogger.Printf("could not shutdown server: %v", err) } else […]

如何在主机上使用golang访问docker中安装的kafka

我需要使用golang来访问kafka,所以我在Docker中安装了一个kafka&zookepper。 1.卡夫卡安装脚本: # pull images docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka # run kafka & zookepper docker run -d –name zookeeper -p 2181 -t wurstmeister/zookeeper docker run –name kafka -e HOST_IP=localhost -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_BROKER_ID=1 -e ZK=zk -p 9092:9092 –link zookeeper:zk -t wurstmeister/kafka # enter container docker exec -it ${CONTAINER ID} /bin/bash cd opt/kafka_2.11-0.10.1.1/ # […]

在docker golang api的docker中设置容器的端口

我期待着使用docker golang api做下面这样的事情 cmd:docker run -t -i -p 8989:8080“image-name”/ bin / bash 另外我使用的是golang sdk https://github.com/moby/moby/client或https://godoc.org/github.com/moby/moby/client ,我的docker api版本是1.30(Client&Server both) 这是我使用的一段代码 package main import ( "fmt" "github.com/docker/docker/client" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "golang.org/x/net/context" "github.com/docker/go-connections/nat" //"github.com/docker/docker/vendor/github.com/docker/go-connections/nat" ) func check(err error) { if err != nil { panic(err) } } func main(){ ctx := context.Background() cli, err := client.NewEnvClient() check(err) config := […]

消息:读取ECONNRESET,堆栈:错误:从Docker容器内的Go客户端调用HapiJs服务器时读取ECONNRESET

节点版本 :6.11.1 平台 :docker集装箱内的Ubuntu 14.04。 子系统 :http 在运行hapijs服务器的Node项目中调用端点时遇到一个非常特殊的问题。 当端点被直接击中时,没有任何问题。 但是当我们从gohaqd实例中find它时,我们得到: 170809/044343.745, [log,connection,client,error] message: write EPIPE, stack: Error: write EPIPE at exports._errnoException (util.js:1018:11) at WriteWrap.afterWrite (net.js:800:14) 更经常 170809/040643.248, [log,connection,client,error] message: read ECONNRESET, stack: Error: read ECONNRESET at exports._errnoException (util.js:1018:11) at TCP.onread (net.js:568:26) 我知道错误代码意味着某个地方,应用程序正试图写入一个封闭的连接。 但是对于我的生活,我无法弄清楚在哪里。 日志本身是来自hapijs,如果我没有错, 这条线 ,但无法弄清楚为什么节点试图写封闭的连接,无论如何。 记住,这没有任何副作用。 该应用程序运行良好:| 我们打开了NODE_DEBUG=http, net ,得到如下结果。 阅读这些内容时,唯一突出的就是在第二次write ret = true行出现两次,如果这意味着什么的话。 […]

Golang远程debugging器与vscode

我已经按照https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code将我的vscode附加到远程debugging器。 该代码在docker上执行,go文件位于共享驱动器上,可以从docker和我的工作站访问。 在我的工作站上,我可以启动代码并使用以下configuration连接到远程debugging器: { "name": "Remote", "type": "go", "request": "launch", "mode": "remote", "remotePath": "/some/remote/path", "port": 2345, "host": "127.0.0.1", "program": "${workspaceRoot}", "env": {}, "args": [], "showLog": true } 但是,它不会停在断点上。 我的程序崩溃,远程debugging器只说: log breakpoint 2017/08/15 14:34:21 sql: no rows in result set 2017/08/15 14:34:22 debugger.go:473: halting 我知道我的断点的path被访问,因为我在之前添加了一个日志logging探针。 任何想法,为什么它不停止在断点?

在Docker SDK中从容器中获取输出

我试图运行一个使用Docker SDK的容器,我不能从容器中获得输出。 我使用下面的代码来实际运行容器,但不发送应用程序的stderr和stdout。 你能build议我做错了什么吗? type dckr struct { cli *client.Client username string password string addr string ctx context.Context } func (d *dckr) Run(containername string, image string, command []string, bind []string, stdout io.Writer, stderr io.Writer) error { log.Printf("[Create] %s -> %s \n", image, containername) res, err := d.cli.ContainerCreate( d.ctx, &container.Config{ User: "root", AttachStdout: true, AttachStderr: true, […]

Dep xxx恢复,但无法加载它的错误:未find包xxx

我的应用程序中有一个golang应用my-app (克隆的git回购)。 myapp文件夹和我的Dockerfile在同一个地方。 我复制我的项目。 这是我的dockerfile: FROM golang:1.7 RUN go get github.com/tools/godep ADD priv/.netrc /root/.netrc WORKDIR /go/src/my-app ADD ./my-app . RUN godep restore -v 现在godep restore -v失败了。 很多回购很好恢复,有些被跳过: godep: Restoring dependency .. godep: Restoring dependency (if needed): github.com/xxx godep: Skipping already restored repo 它一切正常,直到它需要恢复在my-app回购内的依赖关系? godep: Dep (github.com/otherrepo/random/random) restored, but was unable to load it with error: […]

在Docker容器中部署Golang应用程序

我需要将安静的应用程序部署到Docker容器中。 我的项目有以下结构 go_proj |- bin |- src | | |- com.example | | | |- web_service.go | | | |- github.com.gorilla.mux | | | – … |- Dockerfile 我的Dockerfile应该如何? 也许我应该从容器中下载库(mux)?

Docker Golang SDK – 如何将容器标准输出redirect到一个文件

使用docker golang sdk,可以使用以下方法创build一个容器并将其输出绑定到stdout 。 resp, err := cli.ContainerCreate(ctx, &container.Config{ Image: "alpine", Cmd: []string{"echo", "Hello World"}, AttachStdout: true, }, nil, nil, "") 我怎样才能把这个输出redirect到使用SDK的文件? 我使用github.com/docker/docker/client的官方SDK – github.com/docker/docker/client