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工具会自动使用它可以访问的最深的商品版本。