Docker将端口发布到多个IP

如果我有两个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)第二个命令失败,“地址已被使用”或
B)some_other_container的端口80暴露在192.168.0.2上,而some_container的端口80暴露在192.168.0.3上?

如果是A)那么我怎么能这样做,使得“some_container”始终将其端口80暴露在192.168.0.3上,而以“-p”开头的“some_other_container”(不能指定IP)始终暴露其端口在192.168.0.2?

第一个问题很容易用一个快速testing来回答:

 $ 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. 

除非你想重写linuxnetworking栈(不推荐),否则我相信你的select是把IP传给你的第二个运行命令,把一个默认的IP传给dockerd -ip 192.168.0.2守护进程( dockerd -ip 192.168.0.2 ),或者select一个不同的端口。