OpenWRT——官方镜像安装Docker(网络环境需设置)并配置Sun-Panel

18 --> 详细讲解如何制作 openWRT 的docker 镜像 本文记录 制作openWRT 的 docker 镜像,自动化启动 docker 镜像开启 zabbix-agent 批量监控线路状态。 本文使用的环境: 主机: ubuntu 16.04 openWRT版本: 19.07 镜像类型: x86-64 分为如下步骤: 第一步 安装 docker sudo apt-get install docker.io 第二步 编译 openwrt 镜像 make menuconfig Target Images [*] tar.gz make -j4 V=sc x86 阅读详情
AI摘要

博客介绍了在确认宿主机网络环境符合要求后,进行Docker的安装,无需重启,退出浏览器重新登录可确认安装完成。接着阐述了Sun-Pannel的一键部署,包括项目地址、部署命令,还对命令各选项进行解析,最后提醒测试阶段要打开防火墙规则,并给出默认登录用户名和密码。

Pro更多功能预览地址https://pro.sun-panel.top/#/hpage/pro
Github地址https://github.com/hslr-s/sun-panel?tab=readme-ov-file
在这里插入图片描述

首先确认宿主机网络环境符合要求

curl Google.com

在这里插入图片描述

1.确认没问题后开始安装Docker

opkg update
opkg install dockerd docker luci-app-dockerman

在这里插入图片描述
无需重启,退出浏览器重新登录即可确认docker安装完成
在这里插入图片描述

2.一键部署Sun-Pannel

项目地址

https://github.com/hslr-s/sun-panel?tab=readme-ov-file

一键部署命令

docker run -d --restart=always -p 3002:3002 -v ~/data/docker/sun-panel/conf:/app/conf -v ~/data/docker/sun-panel/uploads:/app/uploads -v ~/data/docker/sun-panel/database:/app/database --name Sun-Panel hslr/sun-panel

如果你想修改端口号为9999

docker stop Sun-Panel
docker rm Sun-Panel
docker run -d --restart=always -p 9999:3002 -v ~/data/docker/sun-panel/conf:/app/conf -v ~/data/docker/sun-panel/uploads:/app/uploads -v ~/data/docker/sun-panel/database:/app/database --name Sun-Panel hslr/sun-panel

在这里插入图片描述

命令解析:

docker run:

这个命令用于启动一个新的 Docker 容器。

-d(detached 模式):

这个选项使容器在后台运行。通常,使用 -d 选项可以使容器与终端分离,容器继续在后台运行。

--restart=always:

这个选项确保容器在退出时自动重启。always 意味着容器会在停止后自动重启,除非 Docker 被停止或容器被明确删除。

-p 3002:3002:

这个选项将宿主机的端口 3002 映射到容器内部的端口 3002。 更改前面的3002 就可以自定义自己的端口号
这意味着,当你访问宿主机的 http://<host_ip>:3002 时,会将请求转发到容器的端口 3002。

-v ~/data/docker/sun-panel/conf:/app/conf:

-v 选项用于挂载宿主机上的目录到容器内的目录。
这里,将宿主机的目录 ~/data/docker/sun-panel/conf 挂载到容器内的 /app/conf 目录。这通常用于配置文件,容器中的应用可以读取这个目录下的配置。

-v ~/data/docker/sun-panel/uploads:/app/uploads:

这个选项将宿主机上的 ~/data/docker/sun-panel/uploads 目录挂载到容器的 /app/uploads 目录。这通常用于存储上传的文件或数据,确保文件可以在宿主机和容器之间共享。

-v ~/data/docker/sun-panel/database:/app/database:

这个选项将宿主机上的 ~/data/docker/sun-panel/database 目录挂载到容器的 /app/database 目录。通常,这个目录用于存储应用的数据库文件。使用挂载的方式可以避免容器内数据丢失,便于数据的持久化。

--name Sun-Panel:

这个选项为容器指定一个名字,Sun-Panel。这样,你可以通过该名称轻松地管理容器(例如停止、启动容器等)。

hslr/sun-panel:

这是你要使用的 Docker 镜像的名称。hslr/sun-panel 是镜像的名称,Docker 会尝试从 Docker Hub 或本地镜像仓库拉取这个镜像。

测试阶段注意防火墙规则要打开

在这里插入图片描述

登录用户名和密码(默认)

账号:admin@sun.cc,密码:12345678
在 Docker 环境下安装 OpenWrt 在 Docker 中安装 OpenWrt 可以帮助您在没有物理设备的情况下轻松地运行 OpenWrt,并为您提供方便的管理和配置选项。通过上述步骤,您可以轻松地在 Docker 中安装和运行 OpenWrt。在 Docker 环境下安装 OpenWrt 是一种方便且易于管理的方式,它允许您在不需要物理设备的情况下运行 OpenWrt。如果您需要其他版本的 OpenWrt,可以在上述命令中更改镜像的名称和标签。您还可以在容器中安装和配置 OpenWrt 的软件包,以满足您的特定需求。 阅读详情

相关推荐

OpenWRT 安装 Docker Compose 详细教程

本文详细介绍了在OpenWRT系统中安装Docker Compose的完整流程。首先强调了三个必要准备条件:已安装Docker环境、配置扩展存储和设备联网。随后分步骤说明安装过程:创建专用目录、下载匹配架构的二进制文件、赋权、创建软链接及验证安装。针对常见问题如架构不匹配、软链接失效和DNS解析失败等提供了解决方案。通过本教程,用户可在存储有限的OpenWRT设备上成功部署Docker Compose,实现多容器应用的便捷管理。

星霜笔记 2543

OpenWrt 中使用 LuCI 界面部署 Docker 镜像

openwrt 部署docker

全栈程序员的开发日常 5650

5分钟搞定:用Docker快速部署OpenWRT镜像(附Zabbix监控配置)

本文详细介绍了如何使用Docker在5分钟内快速部署OpenWRT镜像,并实现配置持久化。通过Docker容器化技术,网络工程师和开发者可以轻松创建可快速启停、环境一致的软路由测试环境。文章还重点讲解了如何集成Zabbix监控,对容器网络状态进行实时监控与告警,形成从部署到运维的完整闭环。

weixin_29280657的博客 196

docker版openwrt

docker版openwrt极致详细版教程!!!!

m0_66724697的博客 1万+

PLC与变频器联动控制:从开关量、模拟量到通讯的接线与编程实战

在工业自动化系统中,电机调速控制是核心需求之一,其关键在于实现可编程逻辑控制器(PLC)与变频器之间的可靠联动。其基本原理是通过PLC输出控制信号,由变频器接收并驱动电机按设定速度运行。这项技术的核心价值在于实现电机的软启停、精确调速与节能控制,广泛应用于风机、水泵、传送带及精密张力控制等场景。其中,开关量控制以其接线简单、抗干扰能力强的特点,成为基础且可靠的方案;而模拟量控制则能实现无级平滑调速,满足更高精度的工艺要求。本文以西门子、三菱等主流品牌为例,深入解析了这两种主流控制方式的硬件接线、参数设置与梯

1268

分享一下使用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程

分享一下调试用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程,看到的朋友们,可以避免继续踩坑。

haoxingheng的专栏 5013

3.玩客云docker拉取openwrt镜像

3.玩客云docker拉取openwrt镜像

YeMu11的博客 3506

MaPLe: Multi-modal Prompt Learning

具体而言,我们在语言分支中附加可学习的上下文标记,并通过耦合函数显式地将视觉 Prompt 置于语言 Prompt 上,以建立它们之间的交互。使用 Prompt 来适应CLIP (语言或视觉) 的单个分支中的表示是次优的,因为它不允许在下游任务上动态调整两个表示空间的灵活性。由此,提出了一种分支感知的多模态 Prompt,通过在两种模态之间共享提示来协调 CLIP 的视觉和语言分支。在 Prompt Tuning 中,必须采取多模态方法获得同时适应 CLIP 的视觉和语言分支,以实现上下文优化的完整性。

weixin_48907099的博客 1051

如何在openwrt中使用docker(命令行版)

openwrt中安装使用docker

全栈程序员的开发日常 9906

抖音直播小风车跳转企业微信全攻略:企业号申请+落地页配置详解

本文详细解析了抖音直播小风车跳转企业微信的全流程,包括企业号申请、小风车配置和落地页优化。通过实战指南,帮助企业高效实现私域流量沉淀,提升直播转化率,特别适合电商和营销从业者参考。

weixin_29289821的博客 613

高通平台 Android T 蓝牙技术全解析:A2DP 与 AVRCP 核心代码路径与交互流程

A2DP 接收端 - 连接流程(AVDTP 打开)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 288

OpenWrt玩转Docker:容器化部署避坑指南,从零搭建高性能边缘计算节点

基于模块化设计的OpenWrt系统为容器化部署创造了技术可能性。部署效率提升:采用预构建的容器镜像方案,可有效规避传统部署中的环境配置障碍,使应用上线周期缩短50%以上。安全防护增强:容器隔离机制形成独立的运行沙箱,既防止进程间的资源竞争,又降低恶意代码传播风险。资源利用率突破:依托共享操作系统内核的特性,硬件资源使用效率较虚拟化方案提升150-200%。跨设备适配扩展:标准化的容器封装格式支持快速迁移部署,满足异构硬件集群的弹性扩展需求。版本控制革新。

ergdfhgerty的博客 3757

[Dify] 如何在Dify中解析上传的TXT文件内容

在Dify平台上构建智能应用时,解析用户上传的.txt文件是关键步骤。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 2636

OpenWrt开发入门实战(一)Docker环境搭建

OpenWrt入门实战之Docker环境搭建 一、环境准备 二、使用Docker搭建OpenWrt编译环境 三、下载OpenWrt源码并创建开发分支 四、编译OpenWrt 五、创建OpenWrt容器

qq_44919281的博客 4896

C#串口通信从入门到精通(21)——一个串口多线程发送数据

本文详细介绍了串口通信中采用多线程发送串口数据的解决方案,由多年实战经验总结,绝对干货!

qq_34059233的博客 3688

详细解读经典跨模态对齐技术Q-Former代码

介绍BLIP2的博客层出不穷,介绍Q-Former的博客也不少,但是详细解读Q-Former代码的博客很少。这篇博客希望以代码为基础,讲明白Q-Former的原理和核心思想,并详细解读一些值得注意的细节。希望读者们能从这一经典技术中朝花夕拾,得到启发。

沉迷单车的追风少年 2459

OpenWrt 与 Docker:打造轻量级容器化应用平台技术分享

OpenWrt 作为一个高度可定制的嵌入式 Linux 发行版,其模块化设计为 Docker 容器化部署提供了可能性。然而,受限于默认内核配置和硬件资源,在 OpenWrt 上运行 Docker 需解决**内核功能支持**与**存储架构适配**两大核心问题。本文将基于技术实践,分享在 OpenWrt 设备上搭建 Docker 环境的完整方案,涵盖从内核编译到容器优化的全流程。

内网渗透的博客 3557

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

docker安装openwrt

问题原因:新建openwrt依赖网络命令中网卡名称不对。

Semanteme的博客 6410

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OpenWrt Docker管理终极指南:5分钟实现可视化容器部署

想要在OpenWrt系统上轻松管理Docker容器吗?luci-app-dockerman这款可视化Docker管理插件正是你需要的完美解决方案。它让复杂的容器操作变得简单直观,即使零基础也能快速上手。 ## 🚀 项目核心亮点 luci-app-dockerman是专为OpenWrt设计的Docker图形化管理工具,将命令行转化为友好的Web界面。无需记忆复杂命令,通过点击即可完成所有容器管

gitblog_00539的博客 1058

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Docker部署OpenWrt,实现旁路由功能

docker openwrt

m0_52150489的博客 1万+

在docekr中运行openwrt镜像

地址: https://archive.openwrt.org/releases/23.05.1/targets/x86/64/

Matrix-yang的博客 1604

Openwrt 官方镜像下载安装

下载的 img 镜像并不适用 VM虚拟机使用,我们还需要使用额外的 windows 工具进行转换。将转换的文件复制到VM虚拟机目录中替换。做初步的了解,应该是最便捷的方式之一。combined:文件系统 + 内核。rootfs: 只有文件系统。openwrt 官网镜像。紧跟的是文件系统的格式。最终下载地址及选择镜像。文件系统类型(可写)

lzyaks的博客 5万+

双网口主机通过docker安装openwrt实现路由

由于本人长期使用docker来进行一些服务的安装,pve这些底层为qemu的虚拟化方案,我感觉小鸡子无法承受,所以搞了2天,折腾了很多地方,最终搞定。分享出来避免大家踩坑。

沙滩玉米 5447

openwrt安装docker并启动

在软件包中下载docker和dockerd 也可以自行下载ipk文件安装 安装成功后启动xshell连上openwrt 执行 /etc/init.d/dockerd 启动docker的daemon服务 若要dockerd自启动则执行 ln -s /etc/init.d/dockerd /etc/rc.d/S100docker 建立软连接,在系统加载时启动docker服务 一下是拉取青龙面板镜像并创建容器的命令 docker run -dit -v /mnt/mmcblk2p4/ql/config:/

fwdwqdwq的博客 8060

3步搞定OpenWrt Docker管理:告别复杂命令行的终极指南

还在为复杂的Docker命令行而头疼吗?luci-app-dockerman让OpenWrt上的Docker管理变得前所未有的简单!这款强大的Web界面工具让你通过直观的可视化操作,轻松管理容器、镜像和网络,彻底告别繁琐的命令行操作。 ## 🚀 什么是luci-app-dockerman? luci-app-dockerman是专为OpenWrt系统设计的Docker管理界面,它将复杂的Do

gitblog_00429的博客 565

界面美到想发朋友圈!部署 Sun-Panel 导航面板,NAS 管理效率翻倍!

打开FileStation,在Container中创建【sun-panel】文件夹,接着在该文件夹下创建三个子文件夹【uploads】、【database】、【conf】在浏览器中输入NAS的IP+端口号即可访问该项目,默认账号和密码:admin@sun.cc / 12345678。点击添加APP,将服务应用地址填进去,有些项目可以自动获取图标,支持本地图片和在线图标。添加完应用后,直接点击图标可直接访问项目,对于docker比较多的用户来说,非常方便。点击右下角,可以进行基本的设置。接着等待程序的创建。

m0_72778094的博客 971
上一篇: OpenWRT——原版简单美化(argon主题,中文汉化)
下一篇: iperf3内网测速方案——5分钟搞定(Windows&&ios)
KeyboardKillers
博客等级 码龄9年 8416粉丝 50原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值