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一个不同的端口。