当前位置: 首页 > 知识库问答 >
问题:

在docker compose中如何将主机网络与默认网络相结合

林星华
2023-03-14

我正在构建包括两个容器的docker-comment服务。其中一个容器(节点)被设计成支持自动发现机制,并且需要成为主机局域网的一部分(因为我需要多播UDP包由局域网路由器处理,而不是内置的docker路由器)。

虽然docker-compose.yml中的network_mode:主机完美地做到了这一点,但我需要此服务也可以通过默认的docker-comment网络(如:超文本传输协议://节点:37326)。network_mode设置为“主机”,这似乎是不可能的。

我的码头工人。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-composdocs(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网络范围的别名仅支持用户定义网络中的容器

共有1个答案

柳飞鸾
2023-03-14

好的,在我看来,不可能将服务配置为同时使用“主机”和“网桥”选项。如果有人指出相反的观点,我会很高兴
我提出了一个简单的解决方案,允许服务作为主机LAN中的一个docker组合单元运行,同时使用“额外的主机”(hNczy建议)进行主机名查找
这并不理想,也可能不适合所有场景,但它确实适合我
基本上,现在有两个服务都在使用“网络模式:主机”,并且“qtcore”服务的“额外主机”附带绑定到127.0.0.1的“节点”名称。

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
 类似资料:
  • 本文向大家介绍Docker主机网络与网桥网络,包括了Docker主机网络与网桥网络的使用技巧和注意事项,需要的朋友参考一下 可用于Docker网络的单主机网络有两种类型:“主机”和“桥”网络。单主机网络意味着它们的影响对于每个单独的主机都是局部的。 在主机网络的情况下,特定的Docker容器可以直接使用主机的网络来发送和接收数据包。对于网桥网络,它需要端口映射才能进行通信。 为了更好地理解它们,让

  • 我有一个 docker 容器,我想给它 --network=host AND -。我需要连接到主机网络才能将主机数据狗服务器 (UDP) 和 网络用于其数据库。 尝试添加这两个网络会导致。 知道正确的处理方法吗?

  • UNIX系统内部用一个主机网络地址数据库来记住主机名和IP地址直接的映射,这一数据库由文件/etc/hosts/或DNS提供。 关键头文件 netdb.h 关键结构体 hostent 用于报错一台主机的完整地址信息 struct hostent //host entry的缩写 { char *h_name; /* 主机的正式名字 */ char **h_aliase

  • 问题内容: 我有一个JFileChooser,我需要以编程方式将其currentDirectory设置为包含多个SMB共享(例如)的网络主机。从技术上讲,这不是“目录”,而是代表可用共享列表的shell文件夹。 JFileChooser导航到特定共享(例如)没有问题,但是不能处理主机“目录”本身(例如)。 用户可以通过“网络”外壳文件夹,或找到特定的共享并导航至其父目录,来导航至JFileChoo

  • 概述 IP 数据报格式 IP 地址编址方式 1. 分类 2. 子网划分 3. 无分类 地址解析协议 ARP 网际控制报文协议 ICMP 1. Ping 2. Traceroute 虚拟专用网 VPN 网络地址转换 NAT 路由器的结构 路由器分组转发流程 路由选择协议 1. 内部网关协议 RIP 2. 内部网关协议 OSPF 3. 外部网关协议 BGP 概述 因为网络层是整个互联网的核心,因此应当

  • 请考虑以下 我将端口连接到主机,以便管理我的服务,但这些服务只需使用默认的docker网络就可以相互访问。例如,运行在上的程序可以访问并且一些DNS魔术将使其工作。我想将我的主机添加到这个网络中,这样我就可以通过其主机名:port访问容器的端口。