645 words
3 minutes
Docker 构建 ImmortalWrt 镜像
Docker 构建 ImmortalWrt 镜像
制作镜像
下载 rootfs
https://downloads.immortalwrt.org/releases/
mkdir wrtcd wrtwget -O rootfs.tar.gz https://downloads.immortalwrt.org/releases/24.10.3/targets/armsr/armv8/immortalwrt-24.10.3-armsr-armv8-rootfs.tar.gzgzip -d rootfs.tar.gz创建一个 Dockerfile 文件
FROM scratchADD rootfs.tar /执行构建
docker build -t immortalwrt .创建网络
# 查看网络ip link show不用开启混杂模式,因为 macvlan 网络与 docker0 的桥接网络完全不同,它不依赖 docker0,而是直接与宿主机的物理接口。
# 假设网卡名称为eth0# 假设你的主路由器网关是192.168.66.1docker network create -d macvlan \ --subnet=192.168.66.0/24 \ --gateway=192.168.66.1 \ -o parent=eth0 \ macnet
# 查看docker中的macvlan网络是否创建成功docker network lsmacvlan 的一个特性是宿主机无法直接与容器通信。如果你的需求是让宿主机与 OpenWrt 容器通信,你需要在 宿主机上创建一个虚拟接口 (通常称为 macvlan 子接口),并将其加入同一 macvlan 网络。
ip link add macvlan-shim link eth0 type macvlan mode bridgeip addr add 192.168.66.2/24 dev macvlan-shimip link set macvlan-shim up注意检查上述 IP 地址
192.168.66.2,确保它没有被其他设备占用。
macvlan-shim是虚拟接口的名称,你可以自定义。192.168.66.2/24是给宿主机虚拟接口分配的 IP 地址,应位于192.168.66.0/24子网内,且不冲突。dev是 device 的缩写,用来指定路由条目所绑定的网络接口(设备)。
添加路由(如果需要) 如果宿主机需要通过 macvlan 网络访问容器,可以添加路由:
ip route add 192.168.66.0/24 dev macvlan-shim运行容器
docker run --name immortalwrt -d --network macnet --privileged immortalwrt-image:latest /sbin/initimmortalwrt为docker容器名称immortalwrt-image是docker镜像名称(上述docker build 所得)
在 ImmortalWrt 命令行里设置静态 IP
# 运行后,进入容器,容器内就是 ImmortalWrt 系统docker exec -it immortalwrt shvi /etc/config/networkconfig interface 'lan' option ifname 'eth0' option proto 'static' option netmask '255.255.255.0' option ipbassign '60' option ipaddr '192.168.66.88' option gateway '192.168.66.1' option dns '223.5.5.5 1.1.1.1'不想用 Vim 的话,可以直接覆盖配置
cat <<EOF > /etc/config/networkconfig interface 'loopback' option device 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0'
config globals 'globals' option ula_prefix 'fd98:9655:39f9::/48'
config interface 'lan' option proto 'static' option netmask '255.255.255.0' option ipbassign '60' option ipaddr '192.168.66.88' option gateway '192.168.66.1' option dns '223.5.5.5 1.1.1.1' option device 'eth0'EOF上述代码中 192.168.66.88 是我设置的 IP 地址,你要 根据自己主路由器的 IP 网段 来调整。
重启 ImmortalWrt 的网络
/etc/init.d/network restart# 如果 ImmortalWrt 没有网络,就在宿主机再次执行一次ip link set macvlan-shim up安装依赖
在 Docker 版的 ImmortalWrt 中安装一些必备插件。
opkg updateopkg install luci-i18n-ttyd-zh-cnopkg install luci-i18n-filebrowser-go-zh-cnopkg install luci-i18n-argon-config-zh-cnopkg install openssh-sftp-server# opkg install luci-i18n-samba4-zh-cn
# 安装网络向导和首页(ARM64 与 x86-64 通用)is-opkg install luci-i18n-quickstart-zh-cnRefer
Docker 构建 ImmortalWrt 镜像
https://gsxhnd.github.io/posts/docker-构建-immortalwrt-镜像/