我想运行下面的 docker 命令docker run ajaycs14/hello-world -p 1527:80 -d
.
如何实现上述使用Docker Go SDK https://godoc.org/github.com/moby/moby/api/types?
下面是运行图像的示例代码,来自官方文档,如何修改下面的代码以获取端口和分离模式等选项。请帮助我修改下面的代码以适用于上述命令(docker run ajaycs14/hello-world -p 1527:80 -d
) ?
package main
import (
"fmt"
"io"
"os"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"golang.org/x/net/context"
)
func main() {
ctx := context.Background()
cli, err := client.NewEnvClient()
if err != nil {
panic(err)
}
imageName := "bfirsh/reticulate-splines"
out, err := cli.ImagePull(ctx, imageName, types.ImagePullOptions{})
if err != nil {
panic(err)
}
io.Copy(os.Stdout, out)
resp, err := cli.ContainerCreate(ctx, &container.Config{
Image: imageName,
}, nil, nil, "")
if err != nil {
panic(err)
}
if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
panic(err)
}
fmt.Println(resp.ID)
}
在方法中ContainerCreate
第三个参数是主机配置 https://godoc.org/github.com/moby/moby/api/types/container#HostConfig您需要使用的。如果您对设置端口感兴趣,那么您应该看看PortBindings
场地。您还需要指定容器的公开端口。您可以通过提供来做到这一点ExposedPorts
into 容器配置 https://godoc.org/github.com/moby/moby/api/types/container#Config(第二个参数)。
我假设你的容器将在daemon
默认模式,因为您使用的是 API 而不是cli
tool.
这是一个工作示例:
package main
import (
"context"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/docker/go-connections/nat"
)
func main() {
cli, err := client.NewEnvClient()
if err != nil {
panic(err)
}
ctx := context.Background()
resp, err := cli.ContainerCreate(ctx, &container.Config{
Image: "mongo",
ExposedPorts: nat.PortSet{"8080": struct{}{}},
}, &container.HostConfig{
PortBindings: map[nat.Port][]nat.PortBinding{nat.Port("8080"): {{HostIP: "127.0.0.1", HostPort: "8080"}}},
}, nil, "mongo-go-cli")
if err != nil {
panic(err)
}
if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
panic(err)
}
}
并在输出中docker ps --all
我可以看到我的端口:PORTS 127.0.0.1:8080->8080/tcp, 27017/tcp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)