在 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
假设一个在 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