Docker将端口发布到多个IP

时间:2016-10-28 02:14:24

标签: networking docker docker-compose

如果我有一台有两个IP的主机,比如192.168.0.2和192.168.0.3,我运行这样的容器:

docker run -p 192.168.0.3:80:80 some_container

然后我运行另一个这样的容器:

docker run -p 80:80 some_other_container

那会发生什么?

A)第二个命令失败,其中"地址已在使用" OR
B)some_other_container的端口80暴露在192.168.0.2上,而some_container的端口80暴露在192.168.0.3上?

如果它是A)那么我怎样才能以这样的方式完成这项工作?#34; some_container"总是将其端口80暴露在192.168.0.3和" some_other_container"以" -p"开头(不能指定IP)总是在192.168.0.2上公开其端口?

1 个答案:

答案 0 :(得分:0)

第一个问题很容易通过快速测试来回答:

$ docker run -itd -p 127.0.0.1:80:80 nginx
acdf03bd196d2241d4f776ff701eab6222cc80bfb1b4dd06bc65af0a3625e602
$ docker run -itd -p 80:80 nginx
b75938101d9c8a28b0d7d220b0046a4f8884fb82e9bc337c65d48a214bc3e54f
docker: Error response from daemon: driver failed programming external connectivity on endpoint lonely_kirch (c144b82f83c7ab1c527c25d9a6807d37069a7382181f9bf98bb1b1cd93976313): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.

除非您想重写linux网络堆栈(不推荐),否则我认为您可以选择将IP传递给第二个运行命令,将默认IP传递给docker守护程序(dockerd -ip 192.168.0.2),或者选择一个不同的港口。