首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go中是否有直接从unix套接字获得html响应的方法(就像curl一样)?

Go中是否有直接从unix套接字获得html响应的方法(就像curl一样)?
EN

Stack Overflow用户
提问于 2017-03-06 22:42:38
回答 1查看 631关注 0票数 1

我需要创建一个码头(1.13)容器,它将作为一个服务在码头群中运行,以调度作业(就像一个在需要时执行'docker‘的集群范围的crontab )。我是个系统管理员,并不是一个真正的程序员,所以我开始用bash,curl和jq来做。这是可行的,但肯定有改进的余地。

为了让您了解我正在处理的mumbo-jumpo,下面是我传递给码头套接字的几个调用片段,以了解服务在哪里运行:

代码语言:javascript
复制
# Get local docker node ID:
curl -s --unix-socket /var/run/docker.sock http:/v1.26/info | jq -r '.Name + " " + .Swarm.NodeID'

# List swarm node ID's:
curl -s --unix-socket /var/run/docker.sock http:/v1.26/nodes | jq -r '.[] | .Description.Hostname + " " + .ID'

# List swarm services:
curl -s --unix-socket /var/run/docker.sock http:/v1.26/nodes | jq -r '.[] | .Description.Hostname + " " + .ID'

# List running tasks:
curl -s --unix-socket /var/run/docker.sock http:/v1.26/tasks | jq -r '.[] | select( .Status.State | contains("running")) | .NodeID + " " + .ServiceID + " " + .ID + " " + .Status.State'

我想用golang做得更好。

我理解在与tcp套接字对话时http.Get是如何工作的:

代码语言:javascript
复制
res, err := http.Get(url)
body, err := ioutil.ReadAll(res.Body)
err = json.Unmarshal(body, &p)
// p is then populated with the content of my request

但是,我如何处理unix文件盒(/var/run/docker.sock)?我想我必须使用net.DialUnix,但到目前为止无法让它工作。

欢迎任何想法或建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-07 08:05:25

试试这个:

代码语言:javascript
复制
package main

import (
    "fmt"
    "net"
    "log"
    "bufio"

)

func main() {
    conn, err := net.Dial("unix", "/var/run/docker.sock")

    if err != nil {
        panic(err)
    }
    fmt.Fprintf(conn, "GET /images/json HTTP/1.0\r\n\r\n")
    status, err := bufio.NewReader(conn).ReadString('\t')
    if err != nil {
        log.Println(err)
    }

    fmt.Print("Message from server: "+status)
}

另一种方法:

使用docker SDK,可用于python、go和其他一些语言。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42636989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档