基本上我需要这样的东西
docker run -p something:something --name xxxx imagename
在golang sdk(这一个https://docs.docker.com/engine/api/sdks/)的docker api中,我当前的代码看起来像这样
exposedPorts, portBindings, _ := nat.ParsePortSpecs([]string{ "127.0.0.1:8080:2368", }) // Running the ghost container createdBody, err := dockerClient.ContainerCreate(context.Background(), &container.Config{ Image: "ghost:latest", ExposedPorts: exposedPorts,// it supposed to be nat.PortSet }, &container.HostConfig{ PortBindings: portBindings,// it supposed to be nat.PortMap }, &network.NetworkingConfig{}, containerName)
我正在使用这个https://github.com/docker/go-connections/blob/master/nat/nat.go#L126 ParsePortSpecs函数返回(map [Port] struct {},map [Port] [] PortBinding ,错误)但失败,因为container.Config.ExposedPorts是nat.PortSet(它实际上是map [Port] struct {} tho)和containter.HostConfig.PortBindins是nat.PortMap
我不确定我是否要使用此客户端https://github.com/fsouza/go-dockerclient,因为我当前版本的docker API为1.25,并且它不支持高于1.23的API版本
自1月以来,Docker Client Go SDK可能已经发生了一些变化,但我刚刚开始工作,所以我将记录我在这里所做的事情.
如果你需要一个暴露的端口,它看起来像4140/tcp
在PORTS下,docker ps
那么你可以执行以下操作:
config := &container.Config{ Image: "nginx", ExposedPorts: nat.PortSet{ "4140/tcp": struct{}{}, }, } hostConfig := &container.HostConfig{} ctx := context.Background() containerResp, err := Docker.ContainerCreate(ctx, config, hostConfig, nil, "") if err != nil { panic(err) } if err := Docker.ContainerStart(ctx, containerResp.ID, types.ContainerStartOptions{}); err != nil { panic(err) }
如果您想将该端口绑定到0.0.0.0上的主机,这看起来像0.0.0.0:4140->4140/tcp
在PORTS下,docker ps
您需要在端口绑定中添加到hostConfig:
config := &container.Config{ Image: "nginx", ExposedPorts: nat.PortSet{ "4140/tcp": struct{}{}, }, } hostConfig := &container.HostConfig{ PortBindings: nat.PortMap{ "4140/tcp": []nat.PortBinding{ { HostIP: "0.0.0.0", HostPort: "4140", }, }, }, } ctx := context.Background() containerResp, err := Docker.ContainerCreate(ctx, config, hostConfig, nil, "") if err != nil { panic(err) } if err := Docker.ContainerStart(ctx, containerResp.ID, types.ContainerStartOptions{}); err != nil { panic(err) }
希望这会节省一些时间:)