加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在docka api的golang sdk中为ContainerCreate函数设置PortBindin

发布时间:2020-12-16 19:29:03 所属栏目:大数据 来源:网络整理
导读:基本上我需要这样的东西 docker run -p something:something --name xxxx imagename 在golang sdk(这一个https://docs.docker.com/engine/api/sdks/)for docker api中,我目前的代码看起来像这样 exposedPorts,portBindings,_ := nat.ParsePortSpecs([]string
基本上我需要这样的东西
docker run -p something:something --name xxxx imagename

在golang sdk(这一个https://docs.docker.com/engine/api/sdks/)for docker api中,我目前的代码看起来像这样

exposedPorts,portBindings,_ := nat.ParsePortSpecs([]string{
    "127.0.0.1:8080:2368",})
// Running the ghost container
createdBody,err := dockerClient.ContainerCreate(context.Background(),&container.Config{
        Image:        "ghost:latest",ExposedPorts: exposedPorts,// it supposed to be nat.PortSet
    },&container.HostConfig{
        PortBindings: portBindings,// it supposed to be nat.PortMap
    },&network.NetworkingConfig{},containerName)

我正在使用这个https://github.com/docker/go-connections/blob/master/nat/nat.go#L126 ParsePortSpecs函数返回(map [Port] struct {},map [Port] [] PortBinding,error)但是失败,因为container.Config.ExposedPorts是nat.PortSet(它实际上是map [Port] struct {} tho)和containter.HostConfig.PortBindins是nat.PortMap

我不确定我是否要使用此客户端https://github.com/fsouza/go-dockerclient,因为我当前版本的docker API为1.25并且它不支持高于1.23的API版本

自1月以来,Docker Client Go SDK可能已经发生了一些变化,但我刚刚开始工作,所以我将记录我在这里所做的事情.

如果您需要一个暴露的端口,在docker ps上的PORTS下看起来像4140 / tcp,那么您可以执行以下操作:

config := &container.Config{
    Image: "nginx",ExposedPorts: nat.PortSet{
        "4140/tcp": struct{}{},},}

hostConfig := &container.HostConfig{}

ctx := context.Background()
containerResp,err := Docker.ContainerCreate(ctx,config,hostConfig,nil,"")
if err != nil {
    panic(err)
}

if err := Docker.ContainerStart(ctx,containerResp.ID,types.ContainerStartOptions{}); err != nil {
    panic(err)
}

如果您想将该端口绑定到0.0.0.0上的主机,在docker ps上的PORTS下看起来像0.0.0.0:4140-u0026gt;4140/tcp,则需要将端口绑定添加到hostConfig:

config := &container.Config{
    Image: "nginx",}

hostConfig := &container.HostConfig{
    PortBindings: nat.PortMap{
        "4140/tcp": []nat.PortBinding{
            {
                HostIP: "0.0.0.0",HostPort: "4140",}

ctx := context.Background()
containerResp,types.ContainerStartOptions{}); err != nil {
    panic(err)
}

希望这会节省一些时间:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读