You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用host网络模式时,如何为Docker同级容器设置别名?

问题:保留host网络模式的HomeAssistant容器通过别名访问Mosquitto容器

我用Docker Compose运行HomeAssistant和Mosquitto两个容器,配置如下:

version: '3'
services:
  homeassistant:
    user: 999:994
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    privileged: true
    network_mode: host
    depends_on:
      - mosquitto
      
  mosquitto:
    user: 999:994
    container_name: mosquitto
    image: eclipse-mosquitto
    restart: unless-stopped
    ports:
      - 1883:1883
      - 9001:9001 
    volumes:
      - /opt/mosquitto/config:/mosquitto/config
      - /opt/mosquitto/data:/mosquitto/data
      - /opt/mosquitto/log:/mosquitto/log
    stdin_open: true
    tty: true

现在想在HomeAssistant容器里用mosquitto这个别名访问Mosquitto容器,但因为HomeAssistant用了network_mode: host,Docker的服务别名解析失效了;如果去掉host网络配置,别名访问正常,但又需要保留host网络的功能。请问怎么配置才能兼顾两者?


可行解决方案

方案1:给HomeAssistant容器添加hosts映射

由于HomeAssistant使用host网络,它的网络栈和宿主机完全一致,而Mosquitto容器已经把端口映射到了宿主机,我们可以直接在HomeAssistant的容器配置里添加hosts映射,强制把mosquitto解析到宿主机IP:

修改HomeAssistant的服务配置,新增extra_hosts字段:

homeassistant:
  # 其他原有配置保持不变
  extra_hosts:
    - "mosquitto:127.0.0.1"  # 也可以填宿主机的局域网IP,比如192.168.1.100

配置完成后,HomeAssistant容器内执行ping mosquitto会直接解析到宿主机IP,从而访问到已映射端口的Mosquitto容器。

方案2:让两个容器共享自定义桥接网络+host网络

Docker支持容器同时连接多个网络,我们可以创建一个自定义桥接网络,让Mosquitto加入该网络,同时让HomeAssistant在保留host网络的基础上,额外连接这个自定义网络,这样HomeAssistant既能保留host网络的功能,又能通过自定义网络的服务别名访问Mosquitto。

修改后的完整docker-compose.yml配置:

version: '3'
# 定义自定义桥接网络
networks:
  mqtt-net:
    driver: bridge

services:
  homeassistant:
    user: 999:994
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    privileged: true
    network_mode: host
    # 额外连接自定义网络
    networks:
      - mqtt-net
    depends_on:
      - mosquitto
      
  mosquitto:
    user: 999:994
    container_name: mosquitto
    image: eclipse-mosquitto
    restart: unless-stopped
    ports:
      - 1883:1883
      - 9001:9001 
    volumes:
      - /opt/mosquitto/config:/mosquitto/config
      - /opt/mosquitto/data:/mosquitto/data
      - /opt/mosquitto/log:/mosquitto/log
    stdin_open: true
    tty: true
    # 加入自定义网络
    networks:
      - mqtt-net

配置完成后,HomeAssistant容器会同时使用host网络和自定义的mqtt-net网络,既保留了host网络的所有特性,又能通过mosquitto别名直接访问同网络内的Mosquitto容器。


内容的提问来源于stack exchange,提问作者linucks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:52:33