如何在 docker-compose 中将主机网络与默认网络结合起来[重复]

2024-01-31

我正在构建包含两个容器的 docker-compose 服务。这些容器之一(node)旨在支持自动发现机制,并且需要成为主机 LAN 的一部分(因为我需要由 LAN 路由器而不是内置的 docker 路由器处理多播 UDP 包)。

虽然 docker-compose.yml 中的“network_mode: host”完美地实现了这一点,但我需要此服务也可用于第二个容器(qtcore)通过默认的 docker-compose 网络通过其主机名(例如:http://node:37326)。当 network_mode 设置为“host”时,这似乎是不可能的。

我的 docker-compose.yml 目前看起来像这样:

version: '3.7'
services:
    qtcore:
        image: yansidorovtesseris/qtcore
        build: .
        container_name: qtcore
        depends_on:
            - node
        env_file: defaults.env
        ports:
            - "8000:8000"

    node:
        image: yansidorovtesseris/komodo
        container_name: node
        env_file: node.env
        ports:
            - "37326:37326"
            - "1900:1900"
        network_mode: host
        volumes:
            - $HOME/node_state:/komodo/.komodo/$AC_NAME

我尝试使用 docker-compose 文档中的示例(https://docs.docker.com/compose/compose-file/#host-or-none https://docs.docker.com/compose/compose-file/#host-or-none) 将主机网络连接为外部网络。考虑将主机和默认网络添加到服务中。

version: '3.7'
services:
    node:
        ...
        networks:
            hostnet: {}
        ...
networks:
    hostnet:
        external: true
        name: host

但是当我尝试运行 docker-compose 时得到的只是以下错误:ERROR: for node network-scoped alias is supported only for containers in user defined networks


好吧,在我看来,不可能将服务配置为同时使用“主机”和“桥接”选项。不过,如果有人指出相反的观点,我会很高兴。
我提出了一种简单的解决方法,允许服务作为主机 LAN 中的一个 docker-compose 单元运行,同时使用“extra_hosts”(由 hNczy 建议)进行主机名查找。
它并不理想,可能不适合所有场景,但它对我有用。
基本上,两个服务现在都使用“network_mode:host”,并且“qtcore”服务的“extra_hosts”提供了绑定到127.0.0.1的“node”名称。

version: '3.7'
services:
    qtcore:
        image: yansidorovtesseris/qtcore
        build: .
        container_name: qtcore
        depends_on:
            - node
        env_file: defaults.env
        network_mode: host
        extra_hosts:
            - "node:127.0.0.1"
        ports:
            - "8000:8000"

    node:
        image: yansidorovtesseris/komodo
        container_name: node
        env_file: node.env
        ports:
            - "37326:37326"
            - "1900:1900"
        network_mode: host
        volumes:
            - $HOME/node_state:/komodo/.komodo/$AC_NAME
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 docker-compose 中将主机网络与默认网络结合起来[重复] 的相关文章

随机推荐

  • 适用于 IE6.0 的 HTML5

    您知道有什么方法可以将此 HTML 代码优化为 IE6 或 7 或 8 而不添加anyHTML 元素 或者 IE 正在跳过所有 HTML5 元素 如果我只想使用 CSS 格式化元素 我不想使用其他功能 document createElem
  • wpf datagrid自动展开第一组

    我有一个数据网格 其中 itemsource 绑定到具有一组的 ListCollectionView 当我填充集合时 我希望第一组自动被视为已展开 如何在 wpf 中对其进行编码 代码隐藏或 mvvm
  • 如何使用git将一个分支重置到另一个分支?

    假设我们有一个hotfixes分支是从创建的master 我们添加了承诺hotfixes 但是这些提交没有用 所以现在我们想从新的副本开始master again 为了更好地澄清 这是参考工作流程 http nvie com posts a
  • Cloud Identity Platform:IdP 发起的 SAML 流是否可行?

    Google Cloud Identity Platform 有文档 https cloud google com identity platform docs how to enable application for saml用于服务提
  • Angular 11 在 SSR @nguniversal/express-engine 上运行 ReferenceError:globalThis 未定义

    尝试跑步 angular fire在 Angular 11 上和 nguniversal express engine 苏维埃社会主义共和国 当初始化时AngularFireModule in app module ts运行命令时出现错误n
  • CPU的矩阵访问和乘法优化

    我在 java 中制作了一些内在优化的矩阵包装器 在 JNI 的帮助下 需要对此予以肯定 你能给出一些关于矩阵优化的提示吗 我要实施的是 矩阵可以表示为四组缓冲区 数组 一组用于水平访问 一组用于垂直访问 一组用于对角线访问 以及一个命令缓
  • 如何在 Eclipse 中组织 100 多个项目?

    当您拥有 5 种以上语言和 100 多个项目时 在我看来 使用一个工作区的默认设置是不可接受的 因为一个工作区会变得非常混乱 拥有一个庞大而杂乱的工作空间会降低您的工作效率 问题 当您拥有 5 种以上语言和 100 多个项目时 使用 Ecl
  • 替代 mongoDB 3.0[之前版本]中的 $strLenCP 字段

    我目前使用的是 mongo 3 0v 我需要找到聚合命令结果中每个字符串的长度 例如 db getCollection temp find key value1 key value2 key valuee2 此查询给出关键字段的长度 db
  • Python 错误 - TypeError:输入最多需要 1 个参数,得到 3 个 [重复]

    这个问题在这里已经有答案了 有人可以解释为什么我不能在目标变量中使用 your name 吗 my name Bryson my age 29 your name input What is your name your age input
  • mySQL - 使用 mysqli 应用行级锁

    使用 PHP 的 mysqli 如何应用行级锁 行级锁会阻止任何人编辑当前存在的符合您条件的行 对吗 但是他们会阻止用户插入符合您条件的行吗 Thanks 如果您想锁定特定行以防止编辑 请使用FOR UPDATE在 SELECT 查询的末尾
  • 如何用一个数组实现3个栈?

    有时 我会遇到以下面试问题 如何用一个数组实现3个堆栈 当然 任何静态分配都不是解决方案 空间 而非时间 高效 你可以 1 定义两个堆栈 从数组端点开始并沿相反方向增长 2 将第三个堆栈定义为从中间开始并向您想要的任何方向增长 3 重新定义
  • Kotlin:我们可以在Kotlin中使用EventBus(GreenRobot)的@Subscribe吗?

    我的 onEvent 在如下片段中 在我的 Kotlin 函数中捕获活动的身份验证 但是 我无法触发 onEvent Subscribe fun onEvent event AuthenticationEvent if event isAu
  • Object.GetHashCode() 的实现

    我正在阅读有效的 C https rads stackoverflow com amzn click com 0321658701并且有一条评论关于Object GetHashCode 我不明白 Object GetHashCode 使用内
  • 帆升起时出现咕噜声错误

    我在帆升降机上遇到此错误 风帆版本 v0 10 0 rc11 error Grunt module js 340 throw err Error Cannot find module home mandeep freelance hello
  • Android 联系信息更新是否有意?

    我可以通过使用 putExtra 将信息作为额外数据传递来使用 Intent 创建新联系人 是否可以使用信息创建 Intent 如果联系人已在电话簿中 它将使用新信息进行更新 实际上 您可以使用意图通过 ContactsContract 创
  • MVC 3 客户端比较验证

    这里发生了一些奇怪的事情 我有一个基本形式 br
  • WPF 自动调整元素大小

    当应用程序窗口调整大小时 我希望其中的元素也按比例调整大小 那可能吗 我尝试谷歌搜索 但找不到任何与此相关的内容 我的 XAML 代码
  • 使用 NodeJS 解包 PKCS#7 数据有效负载?

    我正在开发适用于 iOS 的 MDM NodeJS 服务器 在 Apple 文档中 给出了以下 ruby 代码 p7sign OpenSSL PKCS7 PKCS7 new req body store OpenSSL X509 Store
  • 国际象棋编程(无人工智能)——动作验证

    我正在尝试编写自己的国际象棋引擎 没有人工智能 我知道有国际象棋游戏入门套件 http www chessbin com page Chess Game Starer Kit aspx我观看它是为了获得灵感 但我没有注意到的是经过验证的动作
  • 如何在 docker-compose 中将主机网络与默认网络结合起来[重复]

    这个问题在这里已经有答案了 我正在构建包含两个容器的 docker compose 服务 这些容器之一 node 旨在支持自动发现机制 并且需要成为主机 LAN 的一部分 因为我需要由 LAN 路由器而不是内置的 docker 路由器处理多