暴露Docker镜像的所有端口

37

我正在解决一个问题,即我正在设置一个高可用性集群。虽然我知道应用程序执行故障转移和恢复所需的端口,但一些基于Docker的解决方案似乎不能正常工作。我怀疑有一些我还不知道的端口。

目前,我的EXPOSE语句如下:

EXPOSE 8080 61616 5672 61613 5445 1883

我也使用以下命令启动我的Docker容器:

docker run --network host -p 8080:8080 -p 61616:61616 -p 5672:5672 -p 61613:61613 -p 5445:5445 -p 1883:1883

但为了故障排除,我想要暴露所有端口。

我尝试了类似以下的内容:

EXPOSE 1-65535

但是这样会出现错误。

我怎样才能最好地暴露docker容器的所有端口?

3个回答

66

当使用--network host运行时,无需映射端口。因为网络主机模式会使容器使用主机的网络栈,所以所有Docker容器端口都将可用。

此外,EXPOSE 8080 61616 5672 61613 5445 1883指令是不必要的。这条指令并没有做任何事情,只是一种记录需要映射的端口的方式。

简而言之,使用docker run --network host ...命令将会暴露所有容器端口。


由于某些原因,在 Mac 上(macOS:10.15.7,Docker 引擎 19.03.13)此选项无法正常工作。但在 Linux 机器上是可以的。请记住。 - iutinvg
1
这个功能在 Mac 和 Windows 上没有实现,它并没有出现故障。 - IvanD

10

主机网络驱动程序仅适用于Linux主机,不支持Docker Desktop for Mac、Docker Desktop for Windows或Docker EE for Windows Server。

更多信息请参见Docker文档门户网站


3

使用 host 网络会暴露几乎所有端口,就像您在主机上运行应用程序一样。如果在主机网络模式下使用端口标志,则会忽略这些标志并发出警告。

注意:当使用主机模式网络时,由于容器没有自己的 IP 地址,因此端口映射不起作用,选项 -p、--publish、-P 和 --publish-all 会被忽略,并产生警告:

WARNING: Published ports are discarded when using host network mode

确保您的主机是Linux主机,因为主机网络仅受Linux主机支持。

主机网络驱动程序只能在Linux主机上工作,在Docker Desktop for Mac、Docker Desktop for Windows或Docker EE for Windows Server上不受支持。

这在Docker文档中已经提到了。 查看特定文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接