Tag:

在Kubernetes集群上没有CGO的Golang DNS

我用Golang写了一个api,并部署在一个Kubernetes集群中。 这意味着它运行在一个docker容器与临时图像。 要编译成像scratch / alpine这样的光图像,我需要closurescgo。 但是,如果没有cgo,networking包将无法正常工作。 我知道networking包有一个问题,因为它本身使用cgo。 我需要为这个应用程序使用的所有服务都在另一个Kubernetes命名空间,所以唯一的办法就是使用DNS。 我在这里的一个angular落。 我用这样的东西来构build二进制文件 GOOS='linux' CGO_ENABLED=0 GODEBUG=netdns=go+1 go build -a -installsuffix cgo -ldflags -s -o ./dist/prod/api ./src/backend/api.go 这本身并不能解决问题,但正如布拉德•菲茨帕特里克 ( Brad Fitzpatrick) 在这里所说的那样,这是一个谜团。 我终于得到了它的工作 //Connect is a function that connects to MOngoDB func Connect() (*mgo.Session, error) { var host string if os.Getenv("KUBERNETES") == "true" { cmd := exec.Command("ping", "-c", "1", […]

无法从golang连接到docker postgres容器

我旋转了docker容器的postgres docker run -i -t -v=":/var/lib/postgresql" -p 5432:5432 my_image/postgresql:9.3 并validation它可以从主机使用 psql -h my_docker_ip -p 5432 -U pguser -W pgdb // passowrd: pguser 现在我想用我的主机连接到容器postgres 。 import ( "database/sql" _ "github.com/lib/pq" "fmt" ) func main() { db, err := sql.Open("postgres", "user=pguser password='pguser' host=192.168.99.100 port=5432 sslmode=verify-full") if err != nil { fmt.Println(err) } rows, err := db.Query("SELECT * […]

Docker:golang webapp和postgres服务器之间的连接被拒绝

我无法连接我的Postgres容器和我的golang webapp容器。 我有以下错误: panic: dial tcp [::1]:5432: getsockopt: connection refused 我的docker撰写文件: http://pastebin.com/5LQfn3gy 任何想法如何我可以解决这个问题?

使用go编译交叉编译CGO_ENABLED – 警告:找不到libudev.so.1

我正在尝试为CGO_ENABLED=1交叉编译Golang应用程序,因为libusb依赖 在编译期间,我得到错误: arm-linux-gnueabihf/bin/ld: warning: libudev.so.1, needed by /usr/lib/arm-linux-gnueabihf/libusb-1.0.so, not found (try using -rpath or -rpath-link) 我已经尝试了下面的命令的多个变种,没有运气: CGO_ENABLED=1 GOARCH=arm GOARM=7 PKG_CONFIG_LIBDIR=/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ go build -x -ldflags '-extld=arm-linux-gnueabihf-gcc -rpath=/usr/lib/arm-linux-gnueabihf -L/usr/lib/arm-linux-gnueabihf -ludev' 当我用-x标志运行这个版本的时候,我得到了详细的输出结果,而且在build立src/net包的时候,它看起来像是失败了。 cd /usr/local/go/src/net /usr/local/go/pkg/tool/linux_amd64/cgo -dynpackage net -dynimport $WORK/net/_obj/_cgo_.o -dynout $WORK/net/_obj/_cgo_import.go arm-linux-gnueabihf-gcc -I . -fPIC -marm -pthread -fmessage-length=0 -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -o $WORK/net/_obj/_all.o $WORK/net/_obj/_cgo_export.o $WORK/net/_obj/cgo_linux.cgo2.o $WORK/net/_obj/cgo_resnew.cgo2.o $WORK/net/_obj/cgo_socknew.cgo2.o […]

Docker Golang API使用内存中的文件创build一个容器

目前,要使用golang api将文件放入容器,首先必须创build容器,然后使用CopyToContainer函数(下面的示例)。 是否有可能创build一个容器并为其创build时指定文件,而不必先在文件系统上创build文件? 例1) func main() { cli, err := client.NewEnvClient() if err != nil { panic(err) } resp, err := cli.ContainerCreate(context.Background(), &container.Config{ Image: "alpine", Cmd: []string{"ls", "/"}, }, nil, nil, "testContainer") if err != nil { panic(err) } fmt.Printf("Created: %v\n", resp.ID) cli.CopyToContainer(context.Background(), resp.ID, "/", getTar(),types.CopyToContainerOptions{}) } func getTar() io.Reader { … } 编辑: – […]

Google容器registrygolang mobyauthentication

我正在使用谷歌容器registry托pipe我的docker图像。 我也使用moblang客户端来与golang进行交互。 我正在使用JSON服务密钥方法似乎与RegistryLogin正常工作。 响应文本是login成功。 但是,我不知道如何使用ImagePull返回的身份validation密钥。 在registry设置RegistryAuth似乎设置任何string作为X-Registry-Auth标头传递,谷歌似乎没有提到这个地方。 我试过将返回的密钥作为RegistryAuth传递,我试着运行RegistryLogin,然后只是没有RegistryAuth拉。 我试过base64编码我的authenticationconfiguration,并在RegistryAuth发送。 无论我尝试我得到“从守护进程的错误响应:存储库xxx找不到:不存在或不拉访问”。 运行dockerlogin,然后docker拉与相同的细节在cli上工作正常。 我的代码是: authConfig := types.AuthConfig{ Username: "_json_key", Password: string(decodedKey), ServerAddress: "https://gcr.io", } _, err = engine.Client.RegistryLogin(ctx, authConfig) if err != nil { return err } responseBody, err := engine.Client.ImagePull(ctx, image, types.ImagePullOptions{ }) defer responseBody.Close() if err != nil { return err } codedKey是JSON密钥文件的内容。 任何想法如何得到这个工作?

ssh使用golang中的交互式shell执行nsenter作为远程命令来debuggingdocker容器

我正在尝试在coreos上自动debuggingDocker容器。 我想要一个通过ssh连接到主机的脚本并执行nsenter 。 这将是非常方便的直接从我的OSX框跳转到一个容器,而不需要手动做很多事情。 我知道以这种方式进入集装箱可能会很糟糕,但是如果事情变得艰难,我想使用这样的工具。 所以这里是我在golang迄今为止。 我能够创build一个交互式shell。 在这里,我有问题,像使用ctrl+R反向searchbash历史logging会中断会话。 该代码在下面评论,因此不执行。 但是,我也能够执行一个命令,在这里nsenter ,但我收到错误stdin: is not a tty ,没有更多的事情发生。 我有兴趣知道为什么stdin在我的程序中不是一个tty ,我怎么能实现这一点。 谢谢 package main import ( "code.google.com/p/go.crypto/ssh" "io/ioutil" "log" "os" ) func privateKey() ssh.Signer { buf, err := ioutil.ReadFile("./id_rsa") if err != nil { panic(err) } key, err := ssh.ParsePrivateKey(buf) if err != nil { panic(err) } return […]

我如何使用map struct {}

所以我正忙于使用http://godoc.org/github.com/samalba/dockerclient 使用CreateContainer( http://godoc.org/github.com/samalba/dockerclient#DockerClient.CreateContainer ) 设置一个新的容器 containerConfig := &dockerclient.ContainerConfig{ Image: imageName, AttachStdin: true, AttachStdout: true, AttachStderr: true} containerID, err = docker.CreateContainer(containerConfig, containerName) 工作正常,我得到一个容器,但是,没有暴露的端口。 查看dockerAPI( https://docs.docker.com/reference/api/docker_remote_api_v1.15/ ),我需要设置 “ExposedPorts – 将端口映射到空对象的forms:”ExposedPorts“:{”/:{}“}” 看看我使用的Go dockclient lib的godoc,我看你可以通过它 ExposedPorts map[string]struct{} 但我不知道在这里做什么,从docker的例子传递: "ExposedPorts":{ "22/tcp": {} } 是足够的,那么我怎么做我的containerConfig结构位?

Docker守护进程不会启动或重新启动

我在Ubuntu 14.04,我也升级docker到最近的版本。 每当我做一个sudo /etc/init.d/docker start我得到一个成功的PID如下, docker start/running, process 16267 当我查看PID细节时,我什么都看不到 – ps -p 16267 PID TTY TIME CMD 而当我尝试做一个sudo docker version我看到下面 – Client API version: 1.16 Go version (client): go1.2.1 OS/Arch (client): linux/amd64 2015/01/10 10:30:49 Cannot connect to the Docker daemon. Is 'docker -d' running on this host? sudo docker -d的输出如下, [2015-01-12T21:05:59.889680188+08:00] [info] docker daemon: […]

Docker推荐的项目结构

我正在开发一个Go项目,它具有以下结构(原理图): ./lib1 ./prog1 ./… ./prog2 ./… 哪里: lib1是一个库 prog1和prog2是可执行文件(都依赖于lib1) 简而言之:如何为prog1和prog2创buildDocker文件? 我尝试了几种方法,都无济于事: 在prog1中创build一个Dockerfile / 因为ADD ../lib1不能将ADD ../lib1到容器,因为它不在上下文中(请参阅http://docs.docker.com/reference/builder/#add )。 在根目录下创build一个Dockerfile 忽略实际上我需要两个Dockerfiles(对于prog1和prog2)的事实,我尝试将Dockerfile放置在项目的根目录中。 然而,我需要使用的docker镜像(golang:1.4.1-onbuild)无法find任何Go文件(因为它们在./prog1中,而不是在根目录中): + exec go install -v can't load package: package app: no buildable Go source files in /go/src/app 什么是golang推荐的项目结构:1.4.1-onbuild image? 编辑:更好的问在这里: https : //stackoverflow.com/questions/29209202/dockerizing-gos-hello-world