使用REST API将端口绑定到主机接口

命令行界面的文档说明如下:

要将容器的端口绑定到主机系统的特定接口,请使用docker run命令的-p参数:

一般语法

docker run -p [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp] <image>

当没有提供主机接口时,端口绑定到主机的所有可用接口(又名INADDR_ANY,或0.0.0.0)。当没有提供主机端口时,一个是dynamic分配的。 TCP端口选项的可能组合如下

所以我想知道如何做到这一点,但与REST API?

POST /container/create我试过了:

  • "PortSpecs": ["5432:5432"]这似乎暴露端口,但不绑定到主机接口。
  • "PortSpecs": ["5432"]给了我与前一个相同的结果。
  • "PortSpecs": ["0.0.0.0:5432:5432"]这将返回错误Invalid hostPort: 0.0.0.0这是有道理的。

当我做sudo docker ps容器显示5432/tcp应该是0.0.0.0:5432/tcp

检查容器给我以下几点:

 "NetworkSettings": { "IPAddress": "172.17.0.25", "IPPrefixLen": 16, "Gateway": "172.17.42.1", "Bridge": "docker0", "PortMapping": null, "Ports": { "5432/tcp": null } } 

完整的检查可以在这里find。

这是一个无证的function。 我在邮件列表中find了我的答案:

创build容器时,您必须设置ExposedPorts

 "ExposedPorts": { "22/tcp": {} } 

启动你的容器时,你需要设置PortBindings

 "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] } 

github上已经有这个问题了。

在HostConfig中使用PortBindings启动容器在v1.10中已弃用,并在v1.12中删除。

现在这两个configuration参数在创build容器时都应该包含在内。

 POST /containers/create { "Image": image_id, "ExposedPorts": { "22/tcp": {} }, "HostConfig": { "PortBindings": { "22/tcp": [{ "HostPort": "" }] } } }