gpt4 book ai didi

api - 将 Docker API 用于 GO 时出现问题 - 无法导入 "nat"

转载 作者:IT王子 更新时间:2023-10-29 02:10:56 27 4
gpt4 key购买 nike

我正在尝试使用 golang 的 docker API,可从 github.com/docker/docker/client 获得。到目前为止,我能够在构建镜像期间预定义的端口上启动容器。我正在尝试使用 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",
},
},
},
}

这里的问题是变量“nat”位于 API 的 vendor 文件夹中。我无法直接从 go vendor 文件夹中导入内容。 stackoverflow 上有人建议将 go-connection 文件夹复制到 github 文件夹中,并删除嵌套的 vendor 目录。我按照建议做了,并创建了如下路径:

"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 ver 1.8。

最佳答案

所以您需要做的不仅仅是复制它,您还需要移动它。位于两个不同位置的同一个包对于 go 工具来说是不同的包(因为它不能保证它们是相同的,所以它使用完全限定的导入路径)。

如果您正在使用的包有一个 vendor 目录,并且您需要使用其中的包,您有两个选择:

  • 将所有内容移出 vendor该包中的目录到你的$GOPATH/src
  • 销售包本身,然后从包的 vendor 移动所有内容目录到项目的 vendor 目录 ( <project root>/vendor )。这被称为“扁平化”你的销售依赖项,大多数 Go 销售实用程序(例如 Govendor 或 Godep)可以自动或使用标志来执行此操作。不过,您也可以手动完成。

后者通常是推荐的策略。但是,重要的关键是包本身不能在其自己的 vendor 中包含该库的版本。目录,因为 Go 工具会自动使用它可以访问的包的最深版本。

关于api - 将 Docker API 用于 GO 时出现问题 - 无法导入 "nat",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com