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

Exposing dynamically opened ports inside docker container

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

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

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

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

也许你可以找到一些方法来自动从容器主机前言端口,但是你会遇到与主机网络相同的问题(在多个容器实例的情况下可能会发生端口冲突)。

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

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

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

我还发现非常烦人的是,您不允许在 Docker 中动态公开端口。

使用 Kubernetes 显然你可以:

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

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

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