我建议去代理路由,因为它会使事情更容易动态添加和删除您的容器。也就是说,您可以使用--net container:name
创建一个新的容器与另一个容器的网络名称空间。您将有相同的IP,甚至可以看到相同的连接:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13062f97a75c registry:2 "/bin/registry serve " 11 weeks ago Up 6 hours 0.0.0.0:5000->5000/tcp registry
$ docker run -it --rm --net container:registry debian
[email protected]:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:22 ? 00:00:00 /bin/bash
root 7 1 0 20:22 ? 00:00:00 ps -ef
[email protected]:/# apt-get update && apt-get install net-tools
...
[email protected]:/# netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp6 0 0 :::5000 :::* LISTEN
有趣......如何,即使是工作?他们都可以绑定到相同的端口?我需要使用SOREUSEPORT吗? –
它将每个容器的网络放在同一个命名空间中。所以你在相同的网络接口上。无论你如何重复使用容器外部进程之间的端口,希望在容器内也可以工作。 – BMitch