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

Docker network inspect无法显示docker-compose添加到网络的容器

Hadoop容器无法通过docker-compose自动连接外部网络的解决方法

问题描述

基于big-data-europe的Hadoop Docker镜像编写docker-compose文件,创建了namenode、datanode、resourcemanager、nodemanager、historyserver共5个容器,并配置了外部网络rete1,但容器并未自动加入该网络:

  • 执行docker network inspect rete1时,Containers字段为空
  • 容器实际处于docker-compose默认创建的docker-hadoop_default网络中(可通过docker network ls确认)
  • 手动执行docker network connect rete1 <container_id>可成功连接,但需实现自动配置

问题原因

你的docker-compose文件仅定义了外部网络network1对应rete1,但未将任何服务容器关联到该网络。Docker Compose默认会为项目创建专属的默认网络,容器默认加入这个网络,而非你定义的外部网络。

解决方法

需要在每个服务块中明确指定使用已定义的外部网络,或者将该外部网络设置为项目默认网络。

方法1:为每个服务指定网络

修改docker-compose文件,在每个service块下添加networks配置,关联到定义的network1:

version: "3"

services:
  namenode:
    image: bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8
    container_name: namenode
    restart: always
    ports:
      - 9870:9870
      - 9000:9000
    volumes:
      - hadoop_namenode:/hadoop/dfs/name
    environment:
      - CLUSTER_NAME=test
    env_file:
      - ./hadoop.env
    networks:
      - network1  # 添加网络关联

  datanode:
    image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
    container_name: datanode
    restart: always
    volumes:
      - hadoop_datanode:/hadoop/dfs/data
    environment:
      SERVICE_PRECONDITION: "namenode:9870"
    env_file:
      - ./hadoop.env
    networks:
      - network1  # 添加网络关联
  
  resourcemanager:
    image: bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8
    container_name: resourcemanager
    restart: always
    environment:
      SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864"
    env_file:
      - ./hadoop.env
    networks:
      - network1  # 添加网络关联

  nodemanager1:
    image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
    container_name: nodemanager
    restart: always
    environment:
      SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
    env_file:
      - ./hadoop.env
    networks:
      - network1  # 添加网络关联
  
  historyserver:
    image: bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8
    container_name: historyserver
    restart: always
    environment:
      SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
    volumes:
      - hadoop_historyserver:/hadoop/yarn/timeline
    env_file:
      - ./hadoop.env
    networks:
      - network1  # 添加网络关联
  
volumes:
  hadoop_namenode:
  hadoop_datanode:
  hadoop_historyserver:

networks:
    network1:
        external:
            name: rete1

方法2:设置默认网络为外部网络

更简洁的方式是将rete1设置为项目的默认网络,这样所有服务会自动使用该网络,无需逐个配置:

version: "3"

services:
  namenode:
    image: bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8
    container_name: namenode
    restart: always
    ports:
      - 9870:9870
      - 9000:9000
    volumes:
      - hadoop_namenode:/hadoop/dfs/name
    environment:
      - CLUSTER_NAME=test
    env_file:
      - ./hadoop.env

  datanode:
    image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
    container_name: datanode
    restart: always
    volumes:
      - hadoop_datanode:/hadoop/dfs/data
    environment:
      SERVICE_PRECONDITION: "namenode:9870"
    env_file:
      - ./hadoop.env
  
  resourcemanager:
    image: bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8
    container_name: resourcemanager
    restart: always
    environment:
      SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864"
    env_file:
      - ./hadoop.env

  nodemanager1:
    image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
    container_name: nodemanager
    restart: always
    environment:
      SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
    env_file:
      - ./hadoop.env
  
  historyserver:
    image: bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8
    container_name: historyserver
    restart: always
    environment:
      SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
    volumes:
      - hadoop_historyserver:/hadoop/yarn/timeline
    env_file:
      - ./hadoop.env
  
volumes:
  hadoop_namenode:
  hadoop_datanode:
  hadoop_historyserver:

networks:
    default:
        external:
            name: rete1

验证步骤

  1. 停止并移除现有容器:docker-compose down
  2. 启动新配置的容器:docker-compose up -d
  3. 检查网络关联:docker network inspect rete1,此时Containers字段会显示所有Hadoop容器的信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:15:34