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

问题描述 投票:2回答:2

我期待着使用docker golang api做这样的事情

cmd:docker run -t -i -p 8989:8080“image-name”/ bin / bash

我也使用golang sdk https://github.com/moby/moby/clienthttps://godoc.org/github.com/moby/moby/client,我的docker api版本是1.30(客户端和服务器都)

这是我正在使用的一段代码

 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 := &container.Config{
Image : image-name,
ExposedPorts: nat.PortSet{
    "8080/tcp": struct{}{},
},
Cmd : [] string {"sh","-c","while true; do sleep always; done","/bin/bash"},
}

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


  resp, err := cli.ContainerCreate(ctx,config,host_config, nil,"")
  check(err)


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


}

编译此代码后,我收到以下错误

# command-line-arguments
src\main\createcontainer1.go:53: cannot use "github.com/docker/go-connections/nat".PortSet literal (type "github.com/docker/go-connections/nat".PortSet) as type "github.com/docker/docker/vendor/github.com/docker/go-connections/nat".PortSet in field value

src\main\createcontainer1.go:65: cannot use "github.com/docker/go-connections/nat".PortMap literal (type "github.com/docker/go-connections/nat".PortMap) as type "github.com/docker/docker/vendor/github.com/docker/go-connections/nat".PortMap in field value

如果有人知道可能是什么问题以及如何解决它。请回答它,因为我是docker的初学者。

docker go docker-api
2个回答
0
投票

这是一个关于vendor/如何工作的Golang问题。

删除嵌套的供应商目录:

rm -rf vendor/github.com/docker/docker/vendor

如果您使用的是glide,则在安装依赖项时应使用glide install -v

有关详细信息,请查看此报告的issue


-1
投票

我的OSX解决方案:

mv /Users/<user>/go/src/github.com/docker/docker/vendor/github.com/docker/go-connections/{nat,nat.old}
© www.soinside.com 2019 - 2024. All rights reserved.