Docker client for golang 使用教程(二):网络
端口绑定
将微服务放到 docker 容器中运行的时候,端口绑定是一个无可避免的问题。在 docker 命令行中,可以通过简单的-p 8080:80
解决问题。但在 golang client 中,问题却变得复杂起来。
首先来看创建容器的函数签名func (cli *Client) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, containerName string) (container.ContainerCreateCreatedBody, error)
,client 把运行配置拆分成了container.Config
和 container.HostConfig
,也就是容器内部设置和宿主机设置两项。
要实现端口绑定,首先要在容器设置中设定暴露的端口(exposed ports)。
1 | exports := make(nat.PortSet, 10) |
然后,在 host.config 中,设置Host 端口与容器暴露出来的端口的绑定。
1 | ports := make(nat.PortMap) |
至此,在代码中就实现了端口绑定的操作。然而,如果只执行到这一步,编译器一般会报非常诡异的
参考go操作docker - 简书的解决方法,删除gopath里面pkg下面docker的vendor里面相应的connections包,然后运行go get github.com/docker/go-connections/nat
,问题解决。