我正在尝试使用docker's go api创建一个容器。我想使用container.Config.ExposedPorts
API中的ContainerCreate()
公开端口。下面是代码
package main
import (
"fmt"
"context"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/docker/go-connections/nat"
)
func main() {
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.WithVersion("1.38"))
if err != nil {
fmt.Println("Failed to get container envoronment", err)
}
resp, err := cli.ContainerCreate(ctx, &container.Config{
Image: "hyperledger/fabric-ca",
Cmd: []string{"/bin/sh", "-c", "fabric-ca-server start -b admin:adminpw"},
Env: []string{"FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server",
"FABRIC_CA_SERVER_CA_NAME=ca.example.com"},
ExposedPorts: nat.PortSet{"22/tcp":struct{}{},},
}, nil, nil, "ca.example.com")
if err != nil {
fmt.Println(" failed to create container, err:", err)
} else {
fmt.Println(" Container ID :", resp.ID, "warning:", resp.Warnings, "err:", err)
}
}
编译时出现以下错误
vignesh@vignesh-ThinkPad-E470 ~/go-book/src/github.com/my_fabric $ go build asd.go
asd.go:8:9: cannot find package "github.com/docker/go-connections/nat" in any of:
/home/vignesh/go-book/src/github.com/my_fabric/vendor/github.com/docker/go-connections/nat (vendor tree)
/usr/local/go/src/github.com/docker/go-connections/nat (from $GOROOT)
/home/vignesh/go-book/src/github.com/docker/go-connections/nat (from $GOPATH)
由于软件包"github.com/docker/go-connections/nat"
位于"github.com/docker/docker/vendor/github.com/docker/go-connections/nat"
的供应商目录中,因此我在工作目录中创建了一个供应商目录,并将github.com/docker/docker/vendor/github.com/docker/go-connections/nat
的内容复制到github.com/my_fabric/vendor/go-connections/nat
并使用了{导入时为{1}},而不是"github.com/my_fabric/go-connections/nat"
。但是我遇到了以下错误。
"github.com/docker/go-connections/nat"
基本上我想使用docker存储库中供应商目录中的软件包。请帮助:)
答案 0 :(得分:0)
仅在docker环境中尝试向用户提供供应商目录的权限时,它会起作用。用Beucase导入软件包的供应商路径正确。
导入golang的方式如下:-首先,它将从中导入包 如果没有供应商目录,它将寻找
$GOPATH
的src目录 相同的包裹。
该错误表明它无法在任何给定路径下找到该软件包。但是您将其保存在vendor目录中,因此可能是任何权限问题。
由于发生这种情况(如果您使用的是Linux),该权限将不允许访问供应商目录。
另外,最好不要复制而不是在docker中使用Gopkg.toml
生成供应商软件包。
答案 1 :(得分:0)
这两个目录不相同:
github.com/docker/docker/vendor/github.com/docker/go-connections/nat
github.com/my_fabric/vendor/go-connections/nat
您必须将所有Docker的供应商依赖项保持不变(而不是复制)到您自己的供应商目录中,例如以下目录应该存在:
github.com/my_fabric/vendor/github.com/docker/go-connections/nat
请注意github.com/docker
段。如果您复制目录,您将得到两个软件包的副本,这将给您带来麻烦。例如,您最终得到了不同的类型
"github.com/docker/docker/vendor/github.com/docker/go-connections/nat".Port
"github.com/docker/go-connections/nat".Port
您根本不需要更改导入语句。