在 docker 容器中公开动态打开的端口

Gri*_*fin 3 linux iptables docker

假设一个应用程序动态打开在 docker 容器内运行的 UDP 端口,如何将这些端口公开/绑定到外部(主机)端口?

这可能与此处提出的问题相同,但是,答案(使用--net=host)限制了运行多个容器实例向主机公开相同端口的可扩展性。

有没有什么办法可以配置容器中动态打开的端口与主机的一对一映射?

例如端口45199/udp在容器内打开并暴露给45199/udp主机上的端口?

Mac*_*cki 7

可能您可以找到某种方法从容器主机自动为端口添加前言,但是随后您将遇到与主机网络相同的问题(多个容器实例的情况下可能发生端口冲突)。

可能在您的场景中,最好的方法是公开一些端口范围,即:

docker run --expose=7000-8000 ...
Run Code Online (Sandbox Code Playgroud)

并在默认桥接网络的情况下通过 IP 地址引用容器(您必须使用 docker inspect 容器 IP)或在用户定义网络的情况下通过名称引用容器(https://docs.docker.com/engine/userguide/networking/配置-dns/)。