GO使用Docker API时发出问题 – 无法导入“nat”

我正在尝试使用可从github.com/docker/docker/client获得的golang docker API。 到目前为止,我能够在图像生成期间预定义的端口上启动容器。 我试图在运行时使用API​​映射端口; 相当于一些东西

docker run -p 8083:8082 -d myImage:1.0.0 

我试图做如下的映射端口:

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

这里的问题是variables“nat”存在于API的供应商文件夹内。 我无法直接从go供应商文件夹中导入某些内容。 有人build议将复制连接文件夹到github文件夹中,并删除嵌套的供应商目录。 我按照build议做了,并创build了一个path如下:

"github.com/docker/go-connections/nat"

现在我在编译期间得到以下错误:

 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 

有没有人遇到这个问题,并克服呢? 我正在使用Go版本1.8。

所以你需要做的不仅仅是复制它,你需要移动它。 位于两个不同位置的相同的软件包是不同的软件包 (因为它不能保证它们是相同的,所以它使用完全合格的导入path)。

如果您使用的软件包有一个供应商目录,并且您需要使用其中的软件包,则有两种select:

  • 把所有的东西都移到你的$GOPATH/src
  • 先供应软件包本身,然后将软件包的vendor目录中的所有内容移动到项目的供应商目录( <project root>/vendor )中。 这被称为“扁平化”你的销售依赖关系,而大多数销售公用事业(例如Govendor或Godep)可以自动或通过标志来实现。 不过,你也可以手动完成。

后者通常是推荐的策略。 然而,重要的关键在于,软件包本身不能在自己的vendor目录中拥有该库的版本,因为Go工具会自动使用它可以访问的最深的商品版本。