公开Docker镜像的所有端口

时间:2018-03-16 14:33:21

标签: docker

我目前正在对我正在设置HA群集的解决方案进行故障排除。虽然我知道应用程序执行故障转移和故障恢复所需的端口,但不知何故,dockerized解决方案无法正常工作。我怀疑还有一些我还不知道的端口。目前我的EXPOSE声明说:

EXPOSE 8080 61616 5672 61613 5445 1883

我也用

启动我的泊坞窗图像
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容器的所有端口的最佳方法是什么?

4 个答案:

答案 0 :(得分:8)

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

此外,不需要EXPOSE 8080 61616 5672 61613 5445 1883。该指令不做任何事情。它只是一种记录需要映射的端口的方法。

简而言之,运行docker run --network host ...将公开所有容器端口。

答案 1 :(得分:4)

首先,您可以将--publish-all=true|falsedocker run提供给--expose <port>,这是一项一揽子操作,可识别图像的Dockerfile或/proc/sys/net/ipv4/ip_local_port_range命令行标记中的EXPOSE行的每个端口并将其映射到短暂端口范围内的某个主机端口。然后需要使用docker port命令检查创建的映射。临时端口范围由32768 to 61000内核参数配置,通常范围为CommandInvokationFailure: Gradle build failed. C:/Program Files/Java/jdk1.8.0_131\bin\java.exe -classpath "C:\Program Files\Unity2017.2\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-2.14.jar" org.gradle.launcher.GradleMain "assembleDebug" stderr[ FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'gradleOut'. > failed to find Build Tools revision 28.0.0 * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. ] stdout[ BUILD FAILED Total time: 2.877 secs ] exit code: 1 UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.GradleWrapper.RunJava (System.String args, System.String workingdir, UnityEditor.Android.Progress progress) Rethrow as GradleInvokationException: Gradle build failed UnityEditor.Android.GradleWrapper.RunJava (System.String args, System.String workingdir, UnityEditor.Android.Progress progress) UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, UnityEditor.Android.Progress progress) UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

答案 2 :(得分:3)

主机网络驱动程序仅适用于Linux主机,Mac的Docker桌面,Windows的Docker桌面或Windows Server的Docker EE不支持该主机网络驱动程序。

有关the Docker documentation portal的更多信息。

答案 3 :(得分:0)

使用host网络将公开几乎所有端口,就像在主机中运行应用程序一样。如果在主机联网模式下运行时使用了端口标志,则会忽略这些标志并显示警告

注意:考虑到容器在使用主机模式网络时没有自己的IP地址,因此端口映射不会生效,并且-p,--publish,-P和--publish-all选项被忽略,而是发出警告:

WARNING: Published ports are discarded when using host network mode

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

主机网络驱动程序仅适用于Linux主机,Mac的Docker桌面,Windows的Docker桌面或Windows Server的Docker EE不支持该主机网络驱动程序。

这在Docker文档中已提及。 View particular Documentation