IDEA使用docker插件完成springboot打包docker镜像一键发布以及挂载日志

Docker镜像+Nexus私有仓库+IDEA配置远程推送 Docker镜像+Nexus私有仓库+IDEA配置远程推送 文章目录Docker镜像+Nexus私有仓库+IDEA配置远程推送一、docker安装nexus本地私服,Idea通过maven配置deploy本地jar包(简单)二、docker push镜像到第三方nexus远程私服(shell命令操作)三、springboot通过maven插件自动生成docker镜像并push到nexus私服(难) 代码有代码的管理平台,比如GitHub、GitLab、码云等。镜像也有镜像的管理平台,比如DockerHub, 阅读详情

嗯,最近在学docker以及CI,花了两天时间把大大小小的坑踩了一遍之后,决定整理这篇博客给可能会接触到这一块的同学。

注意,本博客并不是教程,但是把百度上大部分教程的坑踩了一遍然后成功了,大家照着教程里给的链接去配置是不会有问题的。

第一个坑

dockerfile-maven-plugin VS docker-maven-plugin

请务必看仔细了,现在很多教程都是直接上docker-maven-plugin,然而你照着教程把依赖copy过去后就会发现,根本使用不了!!!依赖一直报红报红,根本不像视频中copy进去就能愉快的使用,这是为什么呢?
在这里插入图片描述
并不是说教程坑我们,人家GitHub上面写的清清楚楚,随着Spotify的发展,他们意识到dockerfile应该由开发人员来编写,于是之前的docker-maven-plugin已经被废弃, dockerfile-maven-plugin是其替代(吐槽一下:开发真是又当爹又当妈)
因此pom文件的引入方式应该参考人家GitHub上面给的教程。

第二个坑

致命问题,开放2375端口带来的安全漏洞

https://blog.youkuaiyun.com/qq_36850813/article/details/89924207
这篇无CA认证的教程写得很不错,一些视频里面的教程都是直接开放2375端口,允许所有IP访问。的确,这样配置我们能够很愉快的使用docker远程访问,黑客也能很愉快的用你的云服务器挖矿。
具体可以看看这篇博客https://blog.youkuaiyun.com/qq_34043421/article/details/80123339

当然解决的办法也很简单,Docker CA认证
具体参考这篇博客,照着该博主的配置是不会有问题的,亲测有效!
https://blog.youkuaiyun.com/ChineseYoung/article/details/83107353

第三个坑

目录挂载
其实这算是自己眼瞎的失误,目录挂载的路径写错了导致宿主机一直看不到日志。这里贴一下自己Dockerfile和logback-spring.xml的配置:

FROM mcr.microsoft.com/java/jre:8u212-zulu-alpine
#作者
MAINTAINER zfalse <624006385@qq.com>
ADD target/qqlogin-1.0.0-SNAPSHOT.jar qqlogin-1.0.0-SNAPSHOT.jar
#暴露端口
EXPOSE 8008
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-jar", "qqlogin-1.0.0-SNAPSHOT.jar"]

这里解释一下-v /usr/local/docker/logs:logs,因为logback-spring.xml中配置日志文件的生成目录是当前工作目录的logs文件夹下,想要在宿主机上面也能看到这些文件,就需要进行一个目录挂载,/usr/local/docker/logs就是宿主机,也就是你想要存放日志文件的目录
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒;当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">
    <!-- 定义日志的根目录 -->
    <property name="LOG_HOME" value="logs"/>
    <!-- 定义日志文件名称 -->
    <property name="appName" value="docker"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />


    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

    <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志输出格式:
			%d表示日期时间,
			%thread表示线程名,
			%-5level:级别从左显示5个字符宽度
			%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
			%msg:日志消息,
			%n是换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- 当指定application.properties 里面 spring.profiles.active=dev 时,采用第一种格式
            <springProfileb 标签的包含的范围可大可小,自己确定即可否则采用第二种格式-->
            <springProfile name="dev">
                <pattern>%d{HH:mm:ss.SSS} %-5level --- %logger{36} [%line] --- %msg%n</pattern>
            </springProfile>
            <!--默认配置-->
            <springProfile name="!dev">
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </springProfile>
        </layout>
    </appender>


    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名称 -->
        <file>${LOG_HOME}/${appName}.log</file>
        <!--
        当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
        TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
            滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动
            %i:当文件大小超过maxFileSize时,按照i进行文件滚动
            -->
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!--
            可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动,
            且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。注意,删除旧文件是,
            那些为了归档而创建的目录也会被删除。
            -->
            <MaxHistory>365</MaxHistory>
            <!--
            当日志文件超过maxFileSize指定的大小时,根据上面提到的%i进行日志文件滚动
            注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy
            -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 日志输出格式: -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
        </layout>
    </appender>


    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/debug.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/debug/%d{yyyy-MM-dd}/debug.%i.log.zip</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
            </pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/warn.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/warn/%d{yyyy-MM-dd}/warn.%i.log.zip</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
            </pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/error.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}/error.%i.log.zip</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
            </pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/trace.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/trace/%d{yyyy-MM-dd}/trace.%i.log.zip</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
            </pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>TRACE</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--
		logger主要用于存放日志对象,也可以定义日志类型、级别
		name:表示匹配的logger类型前缀,也就是包的前半部分
		level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR
		additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出,
		false:表示只用当前logger的appender-ref,true:
		表示当前logger的appender-ref和rootLogger的appender-ref都有效
    -->

    <!-- Spring framework logger -->
    <logger name="org.springframework" level="debug" additivity="false"/>

    <!--
        root与logger是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应,
        要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。
    -->
    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>

        <appender-ref ref="WARN_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>

    <!--debug 日志级别-->
    <logger name="com.wjx" level="debug">
        <appender-ref ref="DEBUG_FILE"/>
    </logger>


</configuration>
解决docker日志挂载的问题 关键是本地服务器没有写入的权限 关键看这里吧(Permission denied), 一直没有看正方,以为是配置日志文件 找不到有问题,下面是部分异常 10:35:09,498 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(null,true) call failed. java.io.FileNotFoundException: logs/bandwidth.log.2019-04-25.log (Permission denied) at java.io.FileNotFou 立即下载

相关推荐

大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略

本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。

wdx012345的博客 803

云服务器使用docker部署jar包及其配置文件(挂载

在云服务器使用docker部署并运行springboot后端项目构建的jar包

mariousG的博客 3229

PCB印刷电路缺陷检测实战:从数据集准备到模型训练全流程解析

本文详细解析了PCB缺陷检测从数据集准备到模型训练的全流程。重点介绍了PKU-Market-PCB数据集的特点与下载方法,并提供了数据格式转换、模型选择(如YOLOv8)与训练配置的实战代码。针对PCB小目标检测的难点,文章给出了数据分析和模型优化的具体策略,帮助读者构建高效的缺陷检测系统。

weixin_29065791的博客 547

记一次idea+Dockerfile+docker部署

idea的server的docker部分会有日志访问容器所在服务器ip:映射到服务器的端口/项目名 所以这个项目的访问地址为http://192.168.175.130:8099/app。

惟一||.唯一 的博客 939

ArcGIS小白必看:5分钟搞定WGS_1984到Krasovsky_1940_Albers投影转换(附详细步骤)

本文为ArcGIS初学者提供了从WGS_1984地理坐标系转换到Krasovsky_1940_Albers投影坐标系的详细实战指南。文章深入剖析了投影变换与基准面转换的核心区别,通过分步详解创建自定义地理变换、执行投影等关键操作,并附带了常见问题排查与批量处理脚本,旨在帮助用户高效、准确地完成坐标系统转换,为后续空间分析奠定基础。

weixin_29305337的博客 638

对比实验系列:Efficientdet环境配置及训练个人数据集

可以通过下方链接下载Efficientdet源码。

Yayisheng的博客 4585

IDEA通过Docker插件部署SpringBoot项目

使用IDEA配置docker插件部署springboot项目

Cure The World的博客 2525

Transformer模型在语义通信中的实战应用:从信源编码到端到端优化

本文深入探讨了Transformer模型在语义通信中的实战应用,从信源编码到端到端优化。文章分析了Transformer凭借其强大的全局依赖建模能力,如何成为实现高效语义提取与传输的理想架构,并提供了构建可端到端训练系统的具体实现思路与评估方法,旨在为下一代智能通信系统提供技术参考。

o9p0q1的博客 689

springboot项目基于Docker的gitlab-runner的CI/CD实践,实操问题记录并解决办法

1. 项目以容器方式构建 1.1. 在项目中添加dockerFile【springboot项目的根目录下】 FROM mcr.microsoft.com/java/jdk:11-zulu-alpine RUN adduser --disabled-password --gecos '' xxx USER xxx ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} /main/program/hxl-test/test.jar ENTRYPOINT ["java","-jar

小三七的学习 2138

Arduino、ESP32驱动SFA40甲醛传感器(气体传感器篇)

SFA40甲醛传感器是一款基于盛思锐电化学原理的专业HCHO检测模块,具备卓越的抗酒精干扰能力(乙醇交叉敏感度<0.3%)、高达±20ppb的检测精度及0~1000ppb的宽量程。该传感器内置SHT4X温湿度传感器进行自动补偿,确保数据的长期稳定性;其小尺寸、低功耗的特性,可快速集成至智能家居、空气净化器、物联网环境监测等系统中,实现对甲醛浓度的精准、可靠监测。

不脱发的程序猿 302

使用 Simulink + Simscape Electrical 对 级联H桥多电平整流器并网功率分配 进行建模与仿真

摘要:本文详细介绍了基于Simulink对级联H桥(CHB)多电平整流器并网功率分配进行建模的方法。内容包括系统组成、功率分配意义、Simulink建模流程、PWM控制策略实现、功率分配算法设计以及仿真分析。重点阐述了主电路搭建、双环控制结构(外环功率分配+内环电流控制)和载波层叠PWM调制技术,并提供了功率分配算法示例。通过优化参数和控制算法,可提升系统性能。该建模方法为电力电子变换器和新能源并网系统研究提供了有效工具。

amy_mhd的博客 251

IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】

IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】

专注Java后端技术干货、项目源码总结分享,期待您的关注。 3609

第4.4节:保护轴承与安全系统

飞轮储能系统的保护轴承是磁悬浮失效时的最后安全屏障,其设计需满足非干涉性、高可靠性和有限寿命承载原则。转子跌落过程包括自由下落、碰撞、进动和滑行减速等复杂非线性阶段,产生远超常规工况的冲击载荷。保护轴承需具备极限冲击容量、高温耐受性和抗卡死能力。系统采用多层级安全架构,结合故障诊断与健康管理,通过监测振动、电流等参数实现预测性维护。安全停机序列有序结合主动制动与被动摩擦制动,确保系统在极端工况下的安全。保护轴承类型多样,需根据系统规模与可靠性要求合理选择。

技术工作者 227

docker部署springboot项目,并挂载日志目录

我们平时项目部署到测试环境(linux),都是把jar包拷贝到linux下通过java -jar **.jar来运行,这里需要配置java环境啥的比较麻烦,这里介绍如何通过docker部署项目。 将项目打包成jar包,pom中需要添加这个插件: idea打包: 编写Dockerfile文件: 将jar包拷贝至/home/octoiot4life目录,可以自己随便定义目录: 编写的Docke...

mac文的java路 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IDEA 官方 Docker 插件

Docker作为目前主流的容器技术,使用它部署应用是非常方便的!对于这款主流容器技术,IDEA官方自然也是有所支持的。最近体验了一把IDEA官方提供的插件,确实非常好用,今天我们以SpringBoot应用的打包部署为例,来聊聊IDEA官方Docker插件的使用!

人无远虑,必有近忧 5739

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IntelliJ IDEA + Docker一键部署SpringBoot项目

IntelliJ IDEA + Docker一键部署SpringBoot项目

聂可以的博客 6210

Docker - 一键部署项目,IDEA 官方 Docker 插件真香!

Docker - 一键部署项目,IDEA官方Docker插件真香!

1557

Springboot项目快速部署(二):Idea插件docker工具,结合Docker-Compose一键部署Springboot项目到远程Docker容器

Docker Compose 是一个强大的工具,能够帮助开发者和系统管理员更高效地管理和部署容器化应用。它简化了容器管理过程,使得部署复杂应用变得可预测和自动化。

qq_37941840的博客 2043

IDEA Docker插件远程连接Docker,并打包部署启动SpringBoot项目

上图中最下面的那个"Run Maven Goal"点击后,会弹出一个小窗口 ,用来输入要执行的maven命令,这里输入。Docker Image的方式主要是方便IDEA操作远程服务器上docker镜像,监控容器信息。创建成功之后可以看到新创建的容器,也可以在服务器(虚拟机)上用docker命令查看。有时候会出现拉取的时间超时的情况,可以配置一下国内的镜像获取阿里云的加速器。设置完成后,点击下图红框中的绿色三角按钮,执行此配置。这里要注意,在写docker镜像地址的时候,如果docker控制台有乱码,

cristianoxm的博客 2279

配置Docker远程连接并且使用idea一键部署

关于docker的安装和基本使用可以看我的这篇文章https://blog.youkuaiyun.com/yjt520557/article/details/87624188 1.配置docker远程链接端口 首先编辑我们服务器上的docker文件 vi /usr/lib/systemd/system/docker.service 修改以ExecStart开头的行(centos 7): ...

yjt520557的博客 6041

一键部署项目!IDEA官方Docker插件香极了!

今天体验了一把IDEA的官方Docker插件,不使用命令行就可以实现远程Docker镜像与容器的管理,还支持Docker Compose部署,功能确实很强大!在平时开发过程中,使用这款插件来打包、部署、运行SpringBoot应用确实很方便,感兴趣的小伙伴可以尝试下它!

IT_1024的博客 794

IDEA中使用Docker

IDEA中使用Docker

dxb2010的博客 1万+

SpringBoot使用Docker来部署

SpringBoot使用Docker来部署 linux:center 7 docker version: 19.03.1 docker client version: 1.40 idea:2018 安装步骤 安装步骤 https://blog.youkuaiyun.com/a656678879/article/details/89636402#docker 配置docker远程连接端口 vi ...

昆仔的博客 1万+

IDEA 发布 SpringBoot 项目到 Docker

IDEA 发布 SpringBoot 项目到 Docker。首先使用 IDEA 的 SSH 工具连接到 CentOS 7,然后就可以顺便连接到该 CentOS 7 上的 Docker 。最后直接在 IDEA 里可视化的操作 Docker,就相当于在 CentOS 敲一行一行的命令了。这颗”语法糖“好甜~

林深时觉寒的博客 1925

IDEA+Docker部署Springboot项目

大纲 搭建docker环境 项目构建镜像运行到docker上 上传镜像到阿里云服务 操作环境 VM虚拟机安装centOS 安装docker https://www.runoob.com/docker/centos-docker-install.html 配置远程访问 vi /lib/systemd/system/docker.service 找到ExecStart开头行,添加-H tcp://0.0.0.0:2375 ExecStart=/usr/bin/dockerd -H fd:// --cont

天青Azure的博客 352

java远程构建docker镜像_java通过Idea远程一键部署springboot到Docker详解

一、开发前准备1. Docker的安装可以参考https://docs.docker.com/install/2. 配置docker远程连接端口vi /usr/lib/systemd/system/docker.service找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,如下图所示3. 重启dockersystemctl daemon-reloadsystem...

weixin_29443201的博客 289
下一篇: CentOS7使用docker搭建单机版zookeeper及dubbo-admin
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值