{"id":43547166,"url":"https://github.com/crazygit/openwrt-x86-64","last_synced_at":"2026-02-03T19:05:37.310Z","repository":{"id":45771822,"uuid":"254595799","full_name":"crazygit/openwrt-x86-64","owner":"crazygit","description":"openwrt-x86-64 docker image","archived":false,"fork":false,"pushed_at":"2020-04-13T05:49:30.000Z","size":1410,"stargazers_count":163,"open_issues_count":6,"forks_count":49,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-07-30T16:45:49.658Z","etag":null,"topics":["actions","docker","image","openwrt","x86-64"],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crazygit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-10T09:29:04.000Z","updated_at":"2024-06-04T09:19:47.000Z","dependencies_parsed_at":"2022-08-29T11:21:42.427Z","dependency_job_id":null,"html_url":"https://github.com/crazygit/openwrt-x86-64","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/crazygit/openwrt-x86-64","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazygit%2Fopenwrt-x86-64","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazygit%2Fopenwrt-x86-64/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazygit%2Fopenwrt-x86-64/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazygit%2Fopenwrt-x86-64/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crazygit","download_url":"https://codeload.github.com/crazygit/openwrt-x86-64/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazygit%2Fopenwrt-x86-64/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29054082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T15:43:47.601Z","status":"ssl_error","status_checked_at":"2026-02-03T15:43:46.709Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","docker","image","openwrt","x86-64"],"created_at":"2026-02-03T19:05:36.536Z","updated_at":"2026-02-03T19:05:37.300Z","avatar_url":"https://github.com/crazygit.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Build OpenWrt Docker x86-64 image](https://github.com/crazygit/openwrt-x86-64/workflows/Build%20OpenWrt%20Docker%20x86-64%20image/badge.svg?branch=master)\n\n[toc]\n\n# OpenWrt Docker镜像构建\n\n为了在Docker中运行OpenWrt系统，我们需要用到OpenWrt的docker镜像,网上有很多人分享已经制作好的镜像。但是，每个人都有自己不同的需求，自己学会制作镜像就显得特别重要了。\n\n\n其实使用OpenWrt的固件, 可以很方便的构建Docker镜像，这里的固件不光是官方固件，也可以是经过自己定制编译生成的固件。\n\n## 直接使用\n\n如果你只想下载并使用，不关心构建流程，那么你可以直接用下面的命令，并参考后面镜像使用配置部分了解如何使用镜像\n\n```bash\n# 下载镜像\n$ docker pull crazygit/openwrt-x86-64\n\n# 查看镜像信息\n$ docker run --rm crazygit/openwrt-x86-64 cat /etc/banner\n  _______                     ________        __\n |       |.-----.-----.-----.|  |  |  |.----.|  |_\n |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|\n |_______||   __|_____|__|__||________||__|  |____|\n          |__| W I R E L E S S   F R E E D O M\n -----------------------------------------------------\n OpenWrt 19.07.2, r10947-65030d81f3\n -----------------------------------------------------\n```\n\n如果觉得官网镜像功能太简单，也可以用我编译的Lean'S大神的OpenWrt固件\n\n\u003chttps://github.com/crazygit/Actions-OpenWrt\u003e\n\n## 镜像使用配置\n\n镜像的使用可以参考下面两篇文章的方式进行配置,两位都做了非常详细的描述。\n\n* [在Docker 中运行 OpenWrt 旁路网关](https://mlapp.cn/376.html)\n* [Docker上运行Lean大源码编译的OpenWRT](https://openwrt.club/93.html)\n\n同样，如果觉得手动配置比较麻烦，可以使用我整理好使用`docker-compose`的一键拉起服务文件\n\n\u003chttps://github.com/crazygit/family-media-center\u003e\n\n这里主要描述下本人的手动配置方式\n\n首先说说我的使用场景:\n\n我是在宿主机上通过`Docker`运行`OpenWrt`系统，使用它作为旁路由\n\n* 宿主机操作系统: `Ubuntu 18.04.4 LTS`\n* 宿主机IP: `192.168.2.125`\n* 硬路由IP: `192.168.2.1`\n* 分配给OpenWrt系统的IP: `192.168.2.126`\n\n1. 获取网卡名称, 我的网卡名称是`enp3s0`\n    ```bash\n    $ ifconfig\n    br-df8369127cee: flags=4099\u003cUP,BROADCAST,MULTICAST\u003e  mtu 1500\n            inet 172.21.0.1  netmask 255.255.0.0  broadcast 172.21.255.255\n            ether 02:42:12:cd:c6:2c  txqueuelen 0  (Ethernet)\n            RX packets 0  bytes 0 (0.0 B)\n            RX errors 0  dropped 0  overruns 0  frame 0\n            TX packets 0  bytes 0 (0.0 B)\n            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\n\n    docker0: flags=4099\u003cUP,BROADCAST,MULTICAST\u003e  mtu 1500\n            inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255\n            ether 02:42:18:57:96:e1  txqueuelen 0  (Ethernet)\n            RX packets 0  bytes 0 (0.0 B)\n            RX errors 0  dropped 0  overruns 0  frame 0\n            TX packets 0  bytes 0 (0.0 B)\n            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\n\n    enp3s0: flags=4163\u003cUP,BROADCAST,RUNNING,MULTICAST\u003e  mtu 1500\n            inet 192.168.2.125  netmask 255.255.255.0  broadcast 192.168.2.255\n            inet6 fe80::2e56:dcff:fe3c:548a  prefixlen 64  scopeid 0x20\u003clink\u003e\n            ether 2c:56:dc:3c:54:8a  txqueuelen 1000  (Ethernet)\n            RX packets 2099  bytes 2435262 (2.4 MB)\n            RX errors 0  dropped 0  overruns 0  frame 0\n            TX packets 1149  bytes 104504 (104.5 KB)\n            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\n\n    lo: flags=73\u003cUP,LOOPBACK,RUNNING\u003e  mtu 65536\n            inet 127.0.0.1  netmask 255.0.0.0\n            inet6 ::1  prefixlen 128  scopeid 0x10\u003chost\u003e\n            loop  txqueuelen 1000  (Local Loopback)\n            RX packets 110  bytes 9098 (9.0 KB)\n            RX errors 0  dropped 0  overruns 0  frame 0\n            TX packets 110  bytes 9098 (9.0 KB)\n            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\n    ```\n\n2. 开启宿主机网卡混杂模式(可选)\n\n    ```bash\n    # 网卡名称enp3s0用你自己上一步获取到的\n    $ sudo ip link set enp3s0 promisc on\n    ```\n\n3. 为`docker`创建`macvlan`模式的虚拟网络\n\n    子网`--subnet`和网关`--gateway`，以及`parent=enp3s0`网卡名称根据实际情况做调整\n\n    ```bash\n    $ docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=enp3s0 openwrt-LAN\n\n    # 查看创建的虚拟网络\n    $ docker network ls |grep openwrt-LAN\n    21dcddacc389        openwrt-LAN         macvlan             local\n    ```\n\n4. 启动容器\n\n    ```bash\n    # --network使用第4步创建的虚拟网络\n    $ docker run --restart always --name openwrt -d --network openwrt-LAN --privileged crazygit/openwrt-x86-64\n\n    # 查看启动的容器\n    $ docker ps -a\n    ```\n\n5. 进入容器，修改网络配置文件并重启网络\n\n    进入容器并修改`etc/config/network`文件\n\n    ```bash\n    $ docker exec -it openwrt /bin/sh\n    $ vi /etc/config/network\n    ```\n    编辑`lan`口的配置如下，有些参数默认的文件里可能没有，按照下面的格式添加上即可\n    ```\n    config interface 'lan'\n            option type 'bridge'\n            option ifname 'eth0'\n            option proto 'static'\n            option ipaddr '192.168.2.126'\n            option netmask '255.255.255.0'\n            option gateway '192.168.2.1'\n            option dns '192.168.2.1'\n            option broadcast '192.168.2.255'\n            option ip6assign '60'\n    ```\n    上面的参数根据自身的情况调整\n    * `proto`设置使用静态分配IP地址的方式`static`\n    * `ipaddr`为OpenWrt系统分配的静态IP，这里我分配的是`192.168.2.126`(注意: 这个IP地址不要与你本地网络已有的IP地址冲突)\n    * `netmask`为子网掩码`255.255.255.0`\n    * `gateway`为路由器(硬路由)的网关，通常就是你访问路由器的IP地址，这里我是`192.168.2.1`\n    * `dns`为`DNS`服务器的地址，可以是运营商的地址，比如`114.114.114.114`,这里我直接用的路由器的地址`192.168.2.1`\n    * `broadcast`为广播地址`192.168.2.255`\n\n    重启网络\n\n    ```bash\n    $ /etc/init.d/network restart\n    ```\n6. 宿主机网络修复(**目前不生效**)\n\n   如上配置后，通过宿主机没法直接访问OpenWrt系统的网络，参考\n    [将OpenWRT作为宿主机的网关\n](https://openwrt.club/93.html#scroll-6)\n\n    里的方法，使用如下脚本修复网络，**但是不生效**(希望知道的大神不吝赐教)。不过使用局域网的其他设备可以正常访问OpenWrt系统\n\n    ```bash\n    #根据实际情况修改下面两个变量\n    # 网卡名称\n    card=\"enp3s0\"\n    # OpenWrt系统的IP地址\n    openwrt_gateway=\"192.168.2.126\"\n\n    sudo ip link add link $card vLAN type macvlan mode bridge\n    sudo ip addr add 192.168.2.253/24 brd + dev vLAN\n    sudo ip link set vLAN up\n    sudo ip route del default\n    sudo ip route add default via $openwrt_gateway dev vLAN\n\n    #设置宿主机的dns服务器为OpenWRT\n    echo \"nameserver $openwrt_gateway\" |sudo tee /etc/resolv.conf\n    ```\n\n7. 验收成果\n\n    如第7步所介绍的，我们暂时没有办法直接从宿主机访问OpenWrt，只有借助局域网其他设备上的浏览器，打开OpenWrt系统\n\n    \u003chttp://192.168.2.126\u003e\n\n    我使用的是官方固件，初始密码默认为空,其他固件的初始密码视具体的固件而定了\n\n    ![openwet login](screenshots/openwrt_login.png)\n\n    剩下的就是openWrt系统的常规使用和配置，这里就不再详述了\n\n## 手动构建\n\n如果你对自己构建感兴趣，可以继续看下去\n\n### 使用官方固件\n\n这里以`x86-64`平台为例\n\n首先获取获取固件的下载地址\n\n1. 打开[官网](https://downloads.openwrt.org/)，选择当前最新的稳定版本`19.07.2`\n![step1](screenshots/step1.png)\n2. 选择`x86`平台\n![step2](screenshots/step2.png)\n3. 选择`64`位\n![step3](screenshots/step3.png)\n4. 选择固件`generic-rootfs.tar.gz`\n![step4](screenshots/step4.png)\n5. 鼠标右键点击\"复制链接地址\"获取到固件的下载地址，第6步会用到\n![step5](screenshots/step5.png)\n6. 构建镜像\n\n    ```bash\n    $ git clone https://github.com/crazygit/openwrt-x86-64.git openwrt-x86-64\n    $ cd openwrt-x86-64\n    # 参数1: 第5步中获取的固件下载地址\n    # 参数2: docker镜像的名字，可以随便指定: 如crazygit/openwrt-x86-64\n    $ ./build.sh \"https://downloads.openwrt.org/releases/19.07.2/targets/x86/64/openwrt-19.07.2-x86-64-generic-rootfs.tar.gz\" crazygit/openwrt-x86-64\n    ```\n\n### 构建自己的镜像\n\n1. 编译自己的固件,可以参考：\n\n    https://github.com/crazygit/Actions-OpenWrt\n\n2. 下载本库\n\n    ```bash\n    $ git clone https://github.com/crazygit/openwrt-x86-64.git openwrt-x86-64\n    ```\n3. 拷贝自己的固件到`Dockerfile`文件所在的目录,固件文件名后缀应该是`.tar.gz`的\n\n    ```bash\n    $ cd openwrt-x86-64\n    $ cp /path/to/your/firmware.tar.gz openwrt.tar.gz\n    ```\n\n4. 编译镜像\n\n    ```bash\n    # -t后面为镜像的名字，可以随便指定: 如: crazygit/openwrt-x86-64\n    $ docker build . --build-arg FIRMWARE=openwrt.tar.gz -t crazygit/openwrt-x86-64\n    ```\n\n## 使用Github Action自动构建\n\n1. Fork当前仓库\n2. 在项目`Settings-\u003eSecrets`里配置你的docker hub账户的用户名和密码`DOCKER_USERNAME`和`DOCKER_TOKEN`\n3. 在docker hub上创建你在一个仓库来存放编译的镜像\n4. 根据自己的情况修改`.github/workflows/build.yml`文件中的如下环境变量\n\n    ```yaml\n    env:\n      FIRMWARE_URL: \"https://downloads.openwrt.org/releases/19.07.2/targets/x86/64/openwrt-19.07.2-x86-64-generic-rootfs.tar.gz\"\n      REPOSITORY: crazygit/openwrt-x86-64\n      TAG: 19.07.2\n    ```\n5. 提交修改之后，github action会自动编译镜像并将镜像push到你的docker hub账户中指定的仓库里\n\n### 验证镜像\n\n下面的命令注意替换镜像名字`crazygit/openwrt-x86-64`为你自己编译时使用的名字\n\n1. 查看编译的镜像\n\n    ```\n    $ docker image ls |grep crazygit/openwrt-x86-64\n    crazygit/openwrt-x86-64                                                          latest              07f578cefd53        12 minutes ago      9.43MB\n    ```\n\n2. 验证镜像是否正常\n\n    ```bash\n    $ docker run --rm crazygit/openwrt-x86-64 cat /etc/banner\n    _______                     ________        __\n    |       |.-----.-----.-----.|  |  |  |.----.|  |_\n    |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|\n    |_______||   __|_____|__|__||________||__|  |____|\n            |__| W I R E L E S S   F R E E D O M\n    -----------------------------------------------------\n    OpenWrt 19.07.2, r10947-65030d81f3\n    -----------------------------------------------------\n    ```\n\n## 参考\n\n本文构建过程参考自:\n\n\u003chttps://openwrt.org/docs/guide-user/virtualization/docker_openwrt_image\u003e\n\n备注: 官网中的`Dockerfile`示例有一处错误是\n\n```\nADD https://downloads.openwrt.org/chaos_calmer/15.05/x86/generic/openwrt-15.05-x86-generic-Generic-rootfs.tar.gz /\n```\n上面的语句是无效的，因为`ADD`指令只有在添加本地的`.tar.gz`文件时才会自动解压，添加`URL`时不会自动解压。建议使用本仓库的构建方式。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrazygit%2Fopenwrt-x86-64","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrazygit%2Fopenwrt-x86-64","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrazygit%2Fopenwrt-x86-64/lists"}