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

时间:2016-09-25 13:47:16

标签: linux docker iptables

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

这可能与提出的问题here相同,但答案(使用--net=host)限制了运行将相同端口暴露给主机的多个容器实例的可伸缩性。

有没有办法在带有主机的容器中配置动态打开端口的一对一映射?

e.g。端口45199/udp在容器内打开并暴露给主机上的端口45199/udp

2 个答案:

答案 0 :(得分:4)

可能你可以找到一些方法来自动化容器主机的前端端口,但是你会遇到同样的问题,比如主机网络(多个容器实例可能会发生端口冲突)。

可能在你的场景中,最好的方法是暴露一些端口范围,即:

docker run --expose=7000-8000 ...

在默认桥接网络(使用docker inspect时必须使用容器IP)或用户定义网络(https://docs.docker.com/engine/userguide/networking/configure-dns/)的名称时,按IP地址引用容器。

答案 1 :(得分:0)

我也感到非常烦人,不允许您在Docker中动态公开端口。

显然,借助Kubernetes,您可以:

kubectl expose deployment first-deployment --port=80 --type=NodePort

另请参见片尾教程https://www.katacoda.com/courses/kubernetes/launch-single-node-cluster

和此处的kubectl手册https://www.mankier.com/1/kubectl-expose