如果我有一台有两个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上公开其端口?
答案 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
),或者选择一个不同的港口。