具有相同容器端口的多个 docker 容器连接到同一网络

2024-05-12

我有一个依赖于多个 Docker 容器的应用程序。我使用 docker compose,以便所有这些都位于同一网络中以进行容器间通信。但是,我的两个容器正在各自容器内侦听相同的端口 8080,但是映射到主机上的不同端口:8072,8073。对于容器间通信,由于我们使用容器的端口,这会导致问题吗?

限制条件:

  1. 我需要这两个容器来运行我的应用程序。因此我无法将具有相同内部端口的其他容器隔离到不同的网络
  2. 所有容器应在同一主机上运行。

我是 Docker 新手,我不知道如何解决这个问题。

Thanks


IIUC 请参阅此处的文档:https://docs.docker.com/compose/networking https://docs.docker.com/compose/networking

您不需要在主机上公开每个服务的端口,除非您希望从主机访问它们,即在 docker-compose 创建的网络之外。

每个主机的端口必须是唯一的butdocker-compose 创建的网络中的每个服务都可以使用相同的端口而不受惩罚,并由<service-name>:<port>.

在 Docker 示例中,可能有 2 个 Postgres 服务。每个都需要一个唯一的名称:db1; db2但两者都可以使用相同的端口 - “5432”,并且可以从名为的服务中唯一地寻址web(以及彼此)作为db1:8432 and db2:8432.

每个服务实际上对应于不同的主机。因此,只要每个服务|主机的端口都是唯一的,就可以了。而且,只要您在主机上公开的任何端口都是唯一的,您也很好......

扩展这个例子,db1可能会暴露端口9432:8432但是之后db2也许需要找到一个不同的主机端口来使用9433:8432.

在 docker-compose 创建的网络中,您可以访问db1 as db1:8432 and db2 as db2:8432.

从主机(在 docker-compose create 网络之外),您可以访问db1 as localhost:9432 and db2 as localhost:9433.

NB当必须从外部访问这些服务时(例如,仅向主机公开服务端口)可能是一个好习惯。web可能必须暴露但是dbX可能不需要暴露)。您可能希望在调试时更自由地公开服务端口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有相同容器端口的多个 docker 容器连接到同一网络 的相关文章

随机推荐

  • 对 Python 中的嵌套字典进行排序

    我有以下字典 var a Black grams 1906 price 2 05 Blue grams 9526 price 22 88 Gold grams 194 price 8 24 Magenta grams 6035 price
  • MS Access:在列中搜索星号/星号

    我正在寻找一种方法来搜索包含字符串数据类型的列 问题是星号或星号是保留符号 以下查询无法正常工作 select from users where instr pattern 如何编写 Access 查询来搜索列中的星号 您可以使用方括号在
  • 向控制器发送参数

    我懂了
  • Tkinter:无法识别图像文件中的数据[重复]

    这个问题在这里已经有答案了 我有以下问题 我使用外部应用程序生成 GIF 文件 对我来说 GIF 看起来不错 我可以毫无问题地打开它们 然而 使用 photo PhotoImage file screenshot file self pre
  • 在 jelly 脚本中使用 JavaScript

    我正在尝试在 Jenkins 中使用用 JavaScript 编写的脚本 我认为最简单的方法是在 jelly 脚本中调用它们 例如 我有文件 myCustom js alert Hello World function myFunction
  • 在 C++/CLI 中创建时初始化静态字典

    今天我看到创建静态字典并初始化它的 C 代码 public static readonly Dictionary
  • gradle.properties 文件放在哪里

    我正在关注Artifactory1 分钟设置 http www jfrog com video artifactory 1 min setup 我在本地主机上启动并运行了 Artifactory 现在我正在尝试将其与 Intellij Gr
  • 如何根据原始元素将向量中的元素替换为另一个元素[重复]

    这个问题在这里已经有答案了 请考虑以下程序 这是一个最小化的示例 所以不要纠结于我在这里尝试做的事情可以通过以下方式更好地实现 HashMap
  • JavaFX - Outlook 附件 - DnD

    您好 我需要一个 DnD 解决方案来将 Outlook 邮件附件拖到堆栈窗格中 JavaFX Outlook 2010 stackpaneDragAndDropZone setOnDragOver DragEvent event gt Dr
  • 如果存在从 S 到 T 的恒等转换,那么 S 和 T 一定是同一类型吗?

    在 6 1 6 中 C 语言规范中有 隐式引用转换为 从任何引用类型到引用类型 T 如果它具有到引用类型 T0 的隐式标识或引用转换 并且 T0 具有到 T 的标识转换 他们为什么不直接说 从任何引用类型到引用类型 T 如果它具有到 T 的
  • 使用 Spring 验证框架验证请求标头

    是否可以将 Spring 验证框架与 Spring MVC 结合使用来验证 HTTP 请求标头的存在和值 要检查presence请求标头的 您不需要验证框架 请求标头参数默认是强制的 如果请求中缺少强制标头 Spring MVC 会自动响应
  • 可以写入 csv 文件但不能追加

    string pathDesktop Environment GetFolderPath Environment SpecialFolder Desktop string filePath pathDesktop mycsvfile csv
  • 如何编写长时间运行的活动来调用 WF 4.0 中的 Web 服务

    我创建了一个执行 Web 请求并将结果存储到数据库中的活动 我发现对于这些长时间运行的活动 我应该编写一些不同的代码 以便工作流引擎线程不会被阻塞 public sealed class WebSaveActivity NativeActi
  • 使用 LIKE 和撇号的 Mysql 查询问题

    所以我有一个有趣的问题 我从未遇到过 并且似乎找不到太多有关纠正该问题的信息 我有一个庞大的数据库 里面有大量的数据 相当于 10 年的数据 并试图对其进行搜索 现在搜索功能运行良好 但最近有人让我注意到一个 错误 如果你愿意的话 我尝试对
  • Android SSL 无对等证书

    我有一个例外 没有同行证书 当我询问谷歌时 我得到了解决方案 我信任所有证书 但这个问题的答案是 它是不安全的 所以我给班级打电话 HostnameVerifier hostnameVerifier org apache http conn
  • Java:获取当前正在执行的Method对应的对象

    将当前正在执行的方法作为 Method 对象获取的最优雅的方法是什么 我的第一个明显的方法是在辅助类中使用静态方法 该方法将加载当前线程堆栈 获取正确的堆栈跟踪元素 并根据其信息构造 Method 元素 有没有更优雅的方法来实现这一目标 这
  • mlflow 如何使用自定义转换器保存 sklearn 管道?

    我正在尝试使用 mlflow 保存 sklearn 机器学习模型 这是一个包含我定义的自定义转换器的管道 并将其加载到另一个项目中 我的自定义转换器继承自 BaseEstimator 和 TransformerMixin 假设我有 2 个项
  • 读取文件并获取 key=value 而不使用 java.util.Properties

    我正在构建一个 RMI 游戏 客户端将加载一个包含一些键和值的文件 这些键和值将用于多个不同的对象 它是一个保存游戏文件 但我不能为此使用 java util Properties 它符合规范 我必须读取整个文件并忽略注释行和与某些类不相关
  • 向量化 for 循环并返回 x 天的最高价和最低价

    Overview 对于数据帧的每一行 我想计算 x 天的最高价和最低价 x 天的高点高于前 x 天 x 天的低点低于前 x 天 for 循环在此有更详细的解释post https stackoverflow com questions 70
  • 具有相同容器端口的多个 docker 容器连接到同一网络

    我有一个依赖于多个 Docker 容器的应用程序 我使用 docker compose 以便所有这些都位于同一网络中以进行容器间通信 但是 我的两个容器正在各自容器内侦听相同的端口 8080 但是映射到主机上的不同端口 8072 8073