news 2026/5/4 3:50:49

保姆级教程:在Ubuntu 22.04上用Docker部署ImmortalWrt,打造开发测试环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 22.04上用Docker部署ImmortalWrt,打造开发测试环境

在Ubuntu 22.04上使用Docker部署ImmortalWrt的完整指南

对于开发者和网络工程师来说,拥有一个可快速部署、易于管理的网络测试环境至关重要。ImmortalWrt作为OpenWrt的一个分支,提供了更稳定的路由功能和丰富的软件包支持。本文将详细介绍如何在Ubuntu 22.04系统上使用Docker容器化技术部署ImmortalWrt,打造一个灵活的开发测试环境。

1. 环境准备与Docker安装

在开始部署ImmortalWrt之前,我们需要确保Ubuntu系统已经安装了Docker引擎。以下是详细的安装步骤:

首先更新系统软件包并安装必要的依赖:

sudo apt update && sudo apt upgrade -y sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

接下来,添加Docker官方GPG密钥和软件源:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装Docker引擎和Docker Compose插件:

sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

验证Docker安装是否成功:

sudo docker run hello-world

如果看到"Hello from Docker!"的消息,说明Docker已经正确安装并运行。

提示:为了避免每次使用docker命令都需要sudo,可以将当前用户添加到docker组:

sudo usermod -aG docker $USER

然后需要注销并重新登录使更改生效。

2. 网络配置与MACVLAN设置

为了确保ImmortalWrt容器能够像独立设备一样工作,我们需要配置MACVLAN网络。这种网络模式允许容器拥有独立的MAC地址,直接与物理网络通信。

首先,确定要使用的物理网络接口:

ip -o link show | awk '{print $2}' | cut -d':' -f1

假设我们使用enp3s0作为父接口,创建MACVLAN网络:

sudo docker network create -d macvlan \ --subnet=192.168.50.0/24 \ --gateway=192.168.50.1 \ -o parent=enp3s0 \ macvlan_net

参数说明:

参数说明
-d macvlan指定使用macvlan驱动
--subnet设置网络子网范围
--gateway指定网络网关地址
-o parent指定物理网络接口
macvlan_net自定义网络名称

验证网络创建是否成功:

docker network ls

应该能看到名为macvlan_net的网络出现在列表中。

3. 部署ImmortalWrt容器

现在我们可以拉取并运行ImmortalWrt容器了。我们将使用一个经过优化的Docker镜像:

docker run -d \ --name immortalwrt \ --restart unless-stopped \ --network macvlan_net \ --ip 192.168.50.254 \ --privileged \ sulinggg/openwrt:x86_64

这个命令会:

  1. 从Docker Hub拉取sulinggg/openwrt:x86_64镜像
  2. 创建一个名为immortalwrt的容器
  3. 使用之前创建的macvlan网络
  4. 分配静态IP地址192.168.50.254
  5. 以特权模式运行容器

检查容器运行状态:

docker ps -a

等待几分钟让ImmortalWrt完全启动后,就可以通过浏览器访问http://192.168.50.254进入管理界面。

4. 高级配置与自定义

4.1 持久化配置

为了确保配置在容器重启后不会丢失,我们可以将重要目录挂载到宿主机:

mkdir -p ~/docker/immortalwrt/{config,etc} docker stop immortalwrt docker rm immortalwrt docker run -d \ --name immortalwrt \ --restart unless-stopped \ --network macvlan_net \ --ip 192.168.50.254 \ --privileged \ -v ~/docker/immortalwrt/config:/etc/config \ -v ~/docker/immortalwrt/etc:/etc \ sulinggg/openwrt:x86_64

4.2 使用Docker Compose管理

为了更方便地管理ImmortalWrt容器,我们可以创建一个docker-compose.yml文件:

version: '3.8' services: immortalwrt: image: sulinggg/openwrt:x86_64 container_name: immortalwrt restart: unless-stopped privileged: true networks: macvlan_net: ipv4_address: 192.168.50.254 volumes: - ~/docker/immortalwrt/config:/etc/config - ~/docker/immortalwrt/etc:/etc networks: macvlan_net: external: true

使用以下命令启动服务:

docker compose up -d

4.3 多实例部署

对于需要测试复杂网络拓扑的场景,可以部署多个ImmortalWrt实例:

version: '3.8' services: router1: image: sulinggg/openwrt:x86_64 container_name: router1 restart: unless-stopped privileged: true networks: macvlan_net: ipv4_address: 192.168.50.251 router2: image: sulinggg/openwrt:x86_64 container_name: router2 restart: unless-stopped privileged: true networks: macvlan_net: ipv4_address: 192.168.50.252 networks: macvlan_net: external: true

5. 开发测试环境集成

5.1 自动化测试脚本

我们可以编写简单的bash脚本来自动化测试流程:

#!/bin/bash # 测试网络连通性 ping -c 4 192.168.50.254 # 进入容器执行命令 docker exec -it immortalwrt opkg update docker exec -it immortalwrt opkg install tcpdump # 抓包分析 docker exec -it immortalwrt tcpdump -i eth0 -w /tmp/capture.pcap docker cp immortalwrt:/tmp/capture.pcap .

5.2 CI/CD集成示例

在GitLab CI中集成ImmortalWrt测试的示例配置:

stages: - test network_test: stage: test image: docker:20.10 services: - docker:dind script: - docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 -o parent=eth0 macvlan_net - docker run -d --name test_router --network macvlan_net --ip 192.168.50.253 --privileged sulinggg/openwrt:x86_64 - sleep 30 # 等待路由器启动 - apk add curl - curl --connect-timeout 5 http://192.168.50.253 after_script: - docker stop test_router - docker rm test_router - docker network rm macvlan_net

5.3 常见问题排查

遇到问题时,可以尝试以下排查步骤:

  1. 容器无法启动

    docker logs immortalwrt
  2. 网络连接问题

    docker exec -it immortalwrt ping 192.168.50.1
  3. 配置错误

    docker exec -it immortalwrt sh -c "uci show; /etc/init.d/network restart"
  4. 性能监控

    docker stats immortalwrt

6. 实际应用场景

ImmortalWrt容器化部署特别适合以下开发测试场景:

  • 网络协议开发:测试新的网络协议实现
  • 防火墙规则验证:快速验证复杂的防火墙配置
  • 负载测试:模拟不同网络条件下的应用表现
  • CI/CD流水线:作为自动化测试的一部分
  • 教育培训:学习网络路由和防火墙概念

在实际项目中,我发现将网络配置保存在版本控制系统中特别有用,可以轻松回滚到之前的配置状态。另外,使用Docker的标签功能管理不同版本的ImmortalWrt镜像,可以方便地进行A/B测试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 3:49:59

从信息论到MIC:一个更公平的“相关性裁判”是如何工作的?

从信息论到MIC:一个更公平的“相关性裁判”是如何工作的? 在数据科学领域,衡量两个变量之间的关系强度是一个永恒的话题。传统方法如皮尔逊相关系数虽然简单直观,但只能捕捉线性关系。当面对复杂的非线性关联时,我们需…

作者头像 李华
网站建设 2026/5/4 3:49:58

告别盲调!用Gliwa T1上位机深度剖析AUTOSAR任务调度:从FLEX模块集成到Scope/Cont模块实战解析

深度驾驭Gliwa T1:AUTOSAR任务调度异常诊断实战手册 当TC3xx芯片上的RTA-OS突然出现毫秒级执行延迟时,资深工程师会立即意识到——这绝不是简单的配置错误。去年某OEM厂商产线停摆事故的根源,正是某个未被捕获的ISR抢占导致的任务链雪崩。本文…

作者头像 李华
网站建设 2026/5/4 3:44:35

C 中变量的存储类型有哪些

在 C 语言中,变量的存储类型决定了变量的生命周期和作用域。C 语言中有四种主要的存储类型:auto:默认存储类型:如果在函数内部声明一个变量而没有指定存储类型,默认情况下该变量是 auto 类型。作用域:仅限于…

作者头像 李华
网站建设 2026/5/4 3:44:14

Taskell终极指南:10分钟掌握命令行看板任务管理神器

Taskell终极指南:10分钟掌握命令行看板任务管理神器 【免费下载链接】taskell Command-line Kanban board/task manager with support for Trello boards and GitHub projects 项目地址: https://gitcode.com/gh_mirrors/ta/taskell Taskell是一款功能强大的…

作者头像 李华