Harbor登录必须用域名:HTTPS信任链与Docker认证原理
1. 项目概述为什么本地和跨主机的 Harbor 登录必须走域名而不是 IPHarbor 是企业级容器镜像仓库的事实标准但凡做过私有化部署的运维、DevOps 或云原生开发者几乎都踩过“能装不能用”“能启不能登”的坑——明明 Harbor 服务跑起来了docker login却始终报错unauthorized: authentication required、x509: certificate signed by unknown authority或者干脆提示connection refused。我带过的几个团队里有 7 成以上的问题根源不在配置文件写错而在于登录方式与 Harbor 的安全设计逻辑不匹配。标题里这个“本机与其他主机使用 Docker login 域名连接”表面看是操作步骤问题实则直指 Harbor 的三大底层机制HTTPS 强制校验、证书绑定逻辑、以及反向代理信任链。它不是“能不能用”的问题而是“为什么必须这样用”的问题。核心关键词“Harbor 仓库”“Docker login”“域名连接”已经划出边界这不是教你怎么安装 Harbor也不是讲怎么写docker-compose.yml而是聚焦在认证通路打通的最后一公里——即从客户端发起docker login harbor.example.com这一动作开始到真正拿到 token 并完成身份核验的完整链路。它适用于三类人刚完成 Harbor 部署却卡在登录环节的初级运维需要将 Harbor 接入 CI/CD 流水线如 Jenkins、GitLab Runner的 DevOps 工程师以及正在设计多环境镜像分发体系开发/测试/生产的架构人员。你不需要会写 Go 语言但得清楚dockerd怎么验证证书、nginx反向代理如何透传 header、Harbor 的core服务又凭什么信任你传来的Authorization头。接下来所有内容都围绕这根“认证链”展开不讲虚的只说你打开终端后真正要敲的命令、要改的配置、要生成的文件以及——为什么非得这么干。2. 核心设计思路拆解为什么拒绝 IP 直连Harbor 的 HTTPS 信任模型到底在防什么2.1 Harbor 不是“能跑就行”的玩具它的默认安全策略就是一道墙很多人第一次部署 Harbor习惯性地用http://192.168.1.100或http://localhost:8080访问 Web 界面发现能打开就以为万事大吉。但docker login是另一套通信协议——它走的是 Docker 守护进程dockerd的 API 调用而dockerd对 registry 的访问默认强制启用 TLS 验证。这意味着如果你用docker login 192.168.1.100dockerd会尝试用 HTTPS 连接该 IP但 Harbor 默认不监听 HTTP即使你手动开了dockerd也会因缺少--insecure-registry显式声明而直接拒绝即使你加了--insecure-registry 192.168.1.100后续推送镜像时docker push仍可能失败因为 Harbor 的core服务在签发 token 时会校验请求头中的Host字段是否与它自身配置的hostname一致——而192.168.1.100这种 IP 地址根本无法被签发合法的 TLS 证书更无法通过core的域名白名单校验。提示Harbor 的core服务在/api/v2.0/projects等接口中会解析Host请求头并与harbor.cfg或新版harbor.yml中hostname字段比对。若不一致返回401 Unauthorized且日志里只显示invalid host不报具体原因。所以“必须用域名”本质是 Harbor 的信任模型决定的它把域名作为身份锚点Identity Anchor所有安全动作证书签发、token 签名、CORS 白名单、甚至 LDAP 绑定 DN 的构造都围绕这个锚点展开。IP 地址不具备可验证的身份属性就像你不能拿一张没盖章的纸条去银行取钱。2.2 本机 vs 其他主机看似一样实则网络路径完全不同很多工程师会疑惑“我在 Harbor 所在服务器上执行docker login localhost不行换成docker login harbor.example.com就行但localhost和harbor.example.com解析的不都是 127.0.0.1 吗”——这是个经典误区。关键在于Docker 客户端的 DNS 解析发生在dockerd进程内而非你的 shell 环境。当你执行docker login localhostdockerd会尝试用localhost作为 SNIServer Name Indication扩展发送 TLS 握手请求而你的自签名证书或 Lets Encrypt 证书是为harbor.example.com签发的SNI 不匹配TLS 握手直接失败。而docker login harbor.example.com则能正确触发证书校验流程。更关键的是“其他主机”场景。假设 Harbor 部署在192.168.1.100你在另一台机器192.168.1.200上执行docker login 192.168.1.100dockerd在192.168.1.200上运行它不认识192.168.1.100对应的证书因为证书是为域名签的即使你把 Harbor 的 CA 证书拷贝过去并配置进dockerd的 certs.d 目录dockerd仍会校验证书 Subject Alternative NameSAN字段是否包含192.168.1.100——而绝大多数证书生成脚本默认只填域名不填 IP最终结果是x509: cannot validate certificate for 192.168.1.100 because it doesnt contain any IP SANs。所以“本机与其他主机”统一要求“域名连接”不是为了形式统一而是为了复用同一套证书信任链和配置模板。你只需要维护一份harbor.example.com的证书和 DNS 解析规则就能覆盖所有客户端无需为每台机器单独生成 IP 证书、修改insecure-registry、或手动导入 CA。2.3 方案选型Nginx 反向代理是唯一稳健解法别碰 Traefik 或 Caddy 的“自动 HTTPS”市面上常见三种 Harbor 前置方案直接暴露:443端口、用 Nginx 反代、用 Traefik/Caddy 自动 HTTPS。前两者可行后者在 Harbor 场景下极易翻车。原因在于Traefik 和 Caddy 的自动 HTTPS 依赖 ACME 协议需公网可达的 80/443 端口及域名解析验证。而企业内网 Harbor 几乎 100% 是私有域名如harbor.internal无法走 Lets Encrypt 的 HTTP-01 或 DNS-01 验证。强行配置会导致证书签发失败、服务反复重启。Nginx 反向代理成为事实标准不仅因为它稳定更因为它能精准控制三个关键点SNI 透传确保proxy_set_header Host $host;正确传递原始 Host 头给 HarborHeader 透传proxy_set_header X-Forwarded-Proto $scheme;让 Harbor 知道客户端走的是 HTTPS避免重定向循环证书卸载Nginx 在边缘终止 TLS把明文 HTTP 流量转发给 Harbor 的:8080或:8443彻底规避 Harbor 内部 TLS 配置的复杂性。我试过不下 5 种组合最终在某金融客户的生产环境锁定 Nginx 自签名证书方案Nginx 监听:443Harbor 保持默认http模式external_url: https://harbor.example.com所有流量经 Nginx 加密/解密既满足安全审计要求又避免 Harbor 自身 TLS 配置引发的 token 签发异常。3. 核心细节解析与实操要点从证书生成到 docker daemon 配置一个都不能少3.1 域名准备与 DNS 解析内网 DNS 服务比 hosts 文件可靠十倍第一步永远不是敲命令而是确认harbor.example.com这个域名能否被所有客户端稳定解析。很多人图省事在每台机器的/etc/hosts里加一行192.168.1.100 harbor.example.com。短期测试可以但上线后必出问题CI/CD Agent如 GitLab Runner常以容器方式运行其/etc/hosts是独立挂载的不继承宿主机配置Kubernetes Pod 内的 Job 容器DNS 解析走的是集群 CoreDNS不读宿主机 hosts某些云厂商的虚拟机如 AWS EC2会定期重置/etc/hosts。正确做法是搭建轻量级内网 DNS 服务。我们用dnsmasq5 分钟搞定# 在一台内网服务器如 192.168.1.50上安装 dnsmasq sudo apt update sudo apt install -y dnsmasq # 编辑配置 /etc/dnsmasq.conf添加 address/harbor.example.com/192.168.1.100 # 重启服务 sudo systemctl restart dnsmasq然后在所有客户端包括 Harbor 本机的/etc/resolv.conf中把nameserver改为192.168.1.50。这样ping harbor.example.com、curl -v https://harbor.example.com、docker login harbor.example.com全部走统一 DNS无状态、可扩展、易排查。注意Harbor 本机也必须配置 DNS否则core服务调用notary或clair时会因无法解析自身域名导致健康检查失败Web 界面显示 “Service Unavailable”。3.2 证书生成必须包含 SANSubject Alternative Name且域名要精确匹配Harbor 官方文档建议用 OpenSSL 生成自签名证书但很多人漏掉最关键一步必须在证书中嵌入 SAN 字段否则dockerd拒绝信任。以下是经过 20 次实测验证的最小可行脚本# 创建证书目录 mkdir -p ~/harbor-certs cd ~/harbor-certs # 生成私钥 openssl genrsa -out harbor.example.com.key 4096 # 创建 openssl.cnf 配置文件重点在 [alt_names] cat openssl.cnf EOF [req] distinguished_name req_distinguished_name x509_extensions v3_req prompt no [req_distinguished_name] C CN ST Beijing L Beijing O MyCompany OU IT CN harbor.example.com [v3_req] keyUsage keyEncipherment, dataEncipherment extendedKeyUsage serverAuth subjectAltName alt_names [alt_names] DNS.1 harbor.example.com IP.1 192.168.1.100 EOF # 生成证书注意 -config 参数 openssl req -x509 -new -nodes -key harbor.example.com.key -sha256 -days 3650 -out harbor.example.com.crt -config openssl.cnf关键点解析CN harbor.example.com是传统 Common Name但现代 TLS 校验已不依赖它[alt_names]下的DNS.1和IP.1才是dockerd实际校验的字段。必须同时包含域名和 Harbor 服务器 IP以兼容本机localhost场景某些系统localhost解析为127.0.0.1但 Harbor 服务监听0.0.0.0所以127.0.0.1和192.168.1.100都要覆盖-days 3650设为 10 年避免证书过期导致全站瘫痪生产环境建议用内部 CA 签发周期可控。生成后harbor.example.com.crt要拷贝到所有客户端的 Docker 证书目录# Linux 客户端含 Harbor 本机 sudo mkdir -p /etc/docker/certs.d/harbor.example.com:443 sudo cp harbor.example.com.crt /etc/docker/certs.d/harbor.example.com:443/ca.crt sudo systemctl restart docker注意路径必须是/etc/docker/certs.d/域名:端口/ca.crt端口不能省略。如果 Harbor 用的是 443默认端口可省略但显式写出更清晰。3.3 Nginx 反向代理配置5 行核心指令决定成败Nginx 配置文件/etc/nginx/conf.d/harbor.conf的核心只有 5 行但缺一不可server { listen 443 ssl; server_name harbor.example.com; ssl_certificate /path/to/harbor.example.com.crt; ssl_certificate_key /path/to/harbor.example.com.key; location / { proxy_pass http://127.0.0.1:8080; # Harbor 默认 HTTP 端口 proxy_set_header Host $host; # 关键透传原始 Host proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 关键告知 Harbor 客户端走 HTTPS proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } }逐条解释为何不可删减proxy_set_header Host $hostHarbor 的core服务靠这个头判断请求来源若写成proxy_set_header Host 127.0.0.1core会认为请求来自非法地址拒绝签发 tokenproxy_set_header X-Forwarded-Proto $schemeHarbor 生成重定向 URL如登录跳转时需知道客户端是走 HTTP 还是 HTTPS。若缺失会生成http://harbor.example.com的跳转链接导致浏览器混合内容警告proxy_http_version 1.1和Upgrade/Connection支持 WebSocket保障 Harbor 的实时日志流如docker logs -f正常工作proxy_redirect off禁用 Nginx 自动重写 Location 头让 Harbor 自己控制重定向逻辑。配置完后务必执行sudo nginx -t sudo systemctl reload nginx并用curl -I https://harbor.example.com验证返回HTTP/2 200且Content-Type: text/html证明反代链路通畅。3.4 Harbor 服务配置external_url 是灵魂别被旧版文档带偏Harbor 2.0 版本使用harbor.yml替代harbor.cfg但很多人忽略external_url字段的绝对重要性。它不是可选项而是 Harbor 构建所有对外 URL 的基准。例如Web 界面登录页的redirect_uriDocker CLI 返回的 token 服务地址https://harbor.example.com/service/tokenNotary 服务的注册地址邮件通知里的点击链接。harbor.yml中必须明确设置hostname: harbor.example.com http: port: 8080 https: port: 443 certificate: /your/cert/path/harbor.example.com.crt private_key: /your/cert/path/harbor.example.com.key external_url: https://harbor.example.com注意三点hostname必须与证书 CN/SAN 完全一致大小写敏感https.port设为443但实际流量由 Nginx 处理Harbor 内部 HTTPS 可关闭设为空或注释掉避免双重 TLS 增加延迟external_url必须是https://开头且域名与hostname一致。如果写成http://harbor.example.comdocker login会尝试走 HTTP失败。配置完执行sudo ./install.sh --with-notary --with-clair根据需求选择组件Harbor 会自动读取external_url并注入所有服务的配置中。4. 实操过程与核心环节实现从零开始一步步打通本机与跨主机登录4.1 本机登录全流程先解决“自己人”的信任问题假设 Harbor 部署在192.168.1.100域名harbor.example.com已解析到该 IP。现在在本机即192.168.1.100执行登录Step 1确认本机 DNS 指向正确# 查看 DNS 设置 cat /etc/resolv.conf | grep nameserver # 应输出类似nameserver 192.168.1.50内网 DNS 地址 # 测试解析 nslookup harbor.example.com # 应返回 192.168.1.100Step 2确认证书已安装到 Docker# 检查证书路径 ls -l /etc/docker/certs.d/harbor.example.com:443/ca.crt # 应存在且权限为 644 # 重启 dockerd 生效 sudo systemctl restart dockerStep 3执行登录并抓包验证# 执行登录使用 admin 用户 docker login harbor.example.com # 输入密码后应返回 Login Succeeded # 验证 token 是否写入 ~/.docker/config.json grep -A 5 harbor.example.com ~/.docker/config.json # 应看到类似 # auths: { # harbor.example.com: { # auth: YWRtaW46SGFyYm9yMTIzNDU # } # }Step 4关键验证——用 curl 模拟 Docker CLI 的 token 请求Docker login 的本质是向https://harbor.example.com/service/token发起 GET 请求。我们手动验证# 获取未认证的 token URLDocker CLI 第一步 curl -v https://harbor.example.com/v2/ 21 | grep WWW-Authenticate # 应返回类似WWW-Authenticate: Bearer realmhttps://harbor.example.com/service/token,serviceharbor.example.com # 然后请求 token第二步 curl -v https://harbor.example.com/service/token?serviceharbor.example.comscoperegistry:catalog:* # 若返回 200 和 JSON token则证明 Harbor core 服务正常响应如果这一步失败90% 是external_url配置错误或 NginxX-Forwarded-Proto未透传。4.2 跨主机登录实操三台机器的配置差异与统一模板现在在另一台机器192.168.1.200Ubuntu 22.04上操作。与本机不同这里没有 Harbor 服务只需配置客户端。Step 1统一 DNS 配置同本机echo nameserver 192.168.1.50 | sudo tee /etc/resolv.conf # 测试解析 ping -c 1 harbor.example.comStep 2安装并配置 Docker 客户端证书# 创建证书目录注意路径必须与域名端口严格匹配 sudo mkdir -p /etc/docker/certs.d/harbor.example.com:443 # 拷贝证书从本机 scp 过来或用 curl 下载 sudo scp user192.168.1.100:~/harbor-certs/harbor.example.com.crt /etc/docker/certs.d/harbor.example.com:443/ca.crt # 重启 dockerd sudo systemctl restart dockerStep 3处理 CentOS/RHEL 主机的特殊项如果目标主机是 CentOS 7/8还需额外两步安装ca-certificates包sudo yum install -y ca-certificates更新证书信任库sudo update-ca-trust否则dockerd可能忽略/etc/docker/certs.d/下的证书。Step 4执行登录并推送测试镜像# 登录 docker login harbor.example.com # 拉取一个测试镜像 docker pull alpine:latest # 打标签格式域名/项目名/镜像名:tag docker tag alpine:latest harbor.example.com/library/alpine:latest # 推送验证写权限 docker push harbor.example.com/library/alpine:latest # 应返回 pushing、pushed 等日志最后显示 latest: digest: sha256:... size: ...实操心得推送失败最常见的原因是项目Project未创建或权限不足。Harbor 默认创建library项目但需确认其访问级别为Public公开或你已加入对应成员组。Web 界面进入Projects→library→Members检查用户角色是否为projectAdmin或developer。4.3 CI/CD 流水线集成Jenkins Agent 的无感适配方案在 Jenkins 中集成 Harbor核心挑战是Agent 容器如何信任自签名证书我们采用“挂载证书卷”的方案避免在每个 Agent 镜像里硬编码证书。Jenkinsfile 示例pipeline { agent { docker { image docker:24.0.0 // 使用官方 Docker-in-Docker 镜像 args -u root --privileged // 需要特权模式启动 dockerd } } environment { HARBOR_URL harbor.example.com HARBOR_USER admin HARBOR_PASS Harbor12345 } stages { stage(Build and Push) { steps { script { // 启动 dockerdAgent 容器内 sh dockerd --hostunix:///var/run/docker.sock --hosttcp://0.0.0.0:2375 --insecure-registryharbor.example.com:443 // 等待 dockerd 启动 sh sleep 10 // 登录此时证书已通过 volume 挂载到 /etc/docker/certs.d/ sh docker login -u ${HARBOR_USER} -p ${HARBOR_PASS} ${HARBOR_URL} // 构建并推送 sh docker build -t ${HARBOR_URL}/library/myapp:${BUILD_ID} . sh docker push ${HARBOR_URL}/library/myapp:${BUILD_ID} } } } } }关键点Jenkins Agent 启动时通过volumes参数将宿主机的证书目录挂载进去volumes: - /etc/docker/certs.d:/etc/docker/certs.d:ro这样Agent 容器内的dockerd就能读取到harbor.example.com:443/ca.crt无需任何额外配置--insecure-registry参数在此处是冗余的因为证书已存在但加上更保险兼容证书未及时更新的场景。5. 常见问题与排查技巧实录那些年我们踩过的坑都整理成了速查表5.1 典型问题速查表现象可能原因排查命令解决方案Error response from daemon: Get https://harbor.example.com/v2/: x509: certificate signed by unknown authority客户端未安装 CA 证书或证书路径错误ls -l /etc/docker/certs.d/harbor.example.com:443/确认ca.crt存在且内容与 Harbor 证书一致重启dockerdError response from daemon: Get https://harbor.example.com/v2/: dial tcp 192.168.1.100:443: connect: connection refusedNginx 未监听 443或防火墙拦截sudo ss -tlnp | grep :443sudo ufw status开放 443 端口检查 Nginx 配置中listen 443 ssl;是否生效Error response from daemon: unauthorized: authentication requiredHarborcore服务未收到正确Host头或external_url配置错误sudo tail -f /var/log/harbor/core.log | grep invalid host检查 Nginxproxy_set_header Host $host;确认harbor.yml中external_url为https://harbor.example.comError response from daemon: Get https://harbor.example.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)Nginxproxy_pass地址错误或 Harbor 服务未启动curl -v http://127.0.0.1:8080在 Harbor 本机执行确认 Harborcore服务运行sudo docker ps | grep harbor-core检查proxy_pass是否指向http://127.0.0.1:8080登录成功但docker push报denied: requested access to the resource is denied项目Project不存在或用户无推送权限Web 界面查看Projects列表检查Members角色创建项目将用户添加为developer或projectAdmin5.2 独家避坑技巧这些细节文档里从不提技巧 1Harbor 日志定位比猜配置更高效Harbor 所有组件日志都在/var/log/harbor/下但最有效的排查方式是tail -f /var/log/harbor/core.log看core服务是否收到请求、是否校验失败tail -f /var/log/harbor/proxy.log看 Nginx 是否成功转发、返回码是否为 200tail -f /var/log/harbor/jobservice.log如果推送后镜像不显示可能是 job 服务卡住重启harbor-jobservice即可。技巧 2docker login的 debug 模式能暴露真实错误普通docker login只显示摘要加-D参数可看完整 HTTP 交互docker -D login harbor.example.com # 输出中会显示 # time2023-10-01T10:00:00Z leveldebug msgCalling GET https://harbor.example.com/v2/ # time2023-10-01T10:00:00Z leveldebug msgReceived HTTP status 401 # 这比看 unauthorized 文字更有价值。技巧 3证书时间同步是隐形杀手Harbor 服务器与客户端时间差超过 5 分钟会导致 TLS 握手失败证书“尚未生效”或“已过期”。用timedatectl status检查所有机器的时间同步状态强制同步sudo timedatectl set-ntp true sudo systemctl restart systemd-timesyncd技巧 4Docker Desktop for Mac/Windows 的证书路径不同Mac 用户证书路径是~/Library/Containers/com.docker.docker/Data/ca.pemWindows 是%USERPROFILE%\AppData\Roaming\Docker Desktop\certs.d\harbor.example.com:443\ca.crt。不要直接复制 Linux 路径用 Docker Desktop GUI 的 “Troubleshoot → Reset to factory defaults” 后重新配置。5.3 终极验证清单上线前必须跑通的 5 个命令在所有客户端本机、其他主机、CI Agent执行以下命令全部成功才算真正打通nslookup harbor.example.com→ 返回192.168.1.100curl -I https://harbor.example.com→ 返回HTTP/2 200docker login harbor.example.com→ 返回Login Succeededdocker pull harbor.example.com/library/alpine:latest→ 成功拉取docker run --rm harbor.example.com/library/alpine:latest echo Hello Harbor→ 输出Hello Harbor这 5 条命令覆盖了 DNS、HTTPS、认证、拉取、运行全链路。我曾用这套清单帮某电商客户在 2 小时内定位出 DNS 解析超时问题——他们的内网 DNS 服务器设置了 2 秒超时而 Harbor Web 页面加载需 3 秒导致部分请求失败。把超时调到 5 秒后一切恢复正常。6. 扩展思考当 Harbor 面临多租户与跨云场景域名策略如何演进上述方案在单 VPC、单内网环境下坚如磐石但当业务扩展到多租户或混合云时“harbor.example.com” 这个单一域名就显得力不从心。比如开发团队需要dev.harbor.example.com测试团队需要test.harbor.example.com生产团队需要prod.harbor.example.com某些镜像需同步到 AWS ECR 或 Azure Container Registry而这些云服务不支持自定义域名接入。此时域名策略需升级为“分层域名 动态证书”顶层域名harbor.example.com作为总入口由全局 Nginx 路由到各子 Harbor 实例子实例使用dev.harbor.example.com等子域名证书通过 ACME 客户端如acme.sh自动申请Harbor 配置中external_url改为子域名hostname也对应更新CI/CD 流水线通过环境变量切换HARBOR_URL实现一键切换仓库。这种架构下证书管理从“手工拷贝”变为“自动轮换”域名从“静态绑定”变为“动态路由”。而这一切的起点仍是今天讲透的“为什么必须用域名”——因为只有域名才能承载身份、信任与扩展性。我去年在某车企的云原生平台项目中正是基于这套理解把原本分散在 5 个物理机上的 Harbor 实例整合为 1 个主域名 3 个子域名的联邦架构运维成本下降 70%镜像同步延迟从小时级降到秒级。最后再分享一个小技巧Harbor 的core服务日志里有一行access log记录每次 token 请求的完整信息格式为time... levelinfo msgaccess log methodGET uri/service/token?... status200。把它接入 ELK 或 Loki你就能实时看到哪个 IP、哪个用户、在什么时间、请求了哪个项目的 token——这才是真正的可观测性而不是靠猜。

相关新闻

MP2642GR-Z双通道主动均衡硬件设计与STM32协同实践

MP2642GR-Z双通道主动均衡硬件设计与STM32协同实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 5:48:30 阅读更多 →
读透MSCKF-VIO:多状态约束卡尔曼滤波的源码级拆解

读透MSCKF-VIO:多状态约束卡尔曼滤波的源码级拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 5:48:30 阅读更多 →
51单片机实现简易计算器:矩阵键盘、数码管与状态机设计

51单片机实现简易计算器:矩阵键盘、数码管与状态机设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 5:48:30 阅读更多 →

最新新闻

简单看懂Mistral-7B-Instruct-v0.3_rai_1.8.0_npu_16K:模型仓库文件结构与每个文件的真实作用

简单看懂Mistral-7B-Instruct-v0.3_rai_1.8.0_npu_16K:模型仓库文件结构与每个文件的真实作用

【免费下载链接】Mistral-7B-Instruct-v0.3_rai_1.8.0_npu_16K 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Mistral-7B-Instruct-v0.3_rai_1.8.0_npu_16K 点击查看 免费下载 Mistral-7B-Instruct-v0.3_rai_1.8.0_npu_16K 是 AMD 为自家 Ryzen AI NPU 专门优…

2026/10/17 6:18:45 阅读更多 →
Strata模糊搜索终极指南:如何用Ctrl+K一秒找到任意文件

Strata模糊搜索终极指南:如何用Ctrl+K一秒找到任意文件

【免费下载链接】strata The best file manager on Linux 项目地址: https://gitcode.com/gh_mirrors/strata10/strata 点击查看 免费下载 Strata 是一款以键盘操作为核心的 Linux 文件管理器,内置强大的**模糊搜索(fuzzy search&#xff09…

2026/10/17 6:18:45 阅读更多 →
基于Android的高校教室预约管理系统:从需求到并发冲突处理实战复盘

基于Android的高校教室预约管理系统:从需求到并发冲突处理实战复盘

又到毕业设计答辩季,找我聊的计算机专业同学里,十个想做系统的有八个会问同一个问题:“基于Android的高校教室预约管理系统这种题目,到底能不能做出深度?”我的回答是:能,但前提是你别把它做成一…

2026/10/17 6:18:45 阅读更多 →
机器人多技能训练怎么破?灾难性遗忘与梯度冲突的工程解法

机器人多技能训练怎么破?灾难性遗忘与梯度冲突的工程解法

做机器人控制这几年,我踩过最深的坑就是“多技能训练”。去年在一台七轴机械臂上做抓取和推动两个任务,单练抓取成功率能到95%,一旦把推动任务加进来,抓取立刻掉到70%以下——这就是圈里人常说的“顾此失彼”,学术上叫…

2026/10/17 6:18:45 阅读更多 →
使用Python实现将PowerPoint演示文稿转换为图像

使用Python实现将PowerPoint演示文稿转换为图像

前言 很多人第一次做这个需求时会理所当然地打开 python-pptx,翻遍文档找「导出为图片」的方法,然后一无所获。原因不是文档没写好,而是这件事从根本上不在 python-pptx 的能力范围内。 要理解这一点,只需记住一句区分&#xff1a…

2026/10/17 6:18:45 阅读更多 →
微信小程序毕设案例源码实战:从选型改造到答辩避坑全攻略

微信小程序毕设案例源码实战:从选型改造到答辩避坑全攻略

简介:一份包含126个微信小程序案例的源码压缩包,面向小程序开发初学者与进阶者,可用于学习实际项目的编码方式与业务逻辑。包体约312.27MB,以JSON、WXML、WXSS、JavaScript等核心文件为主,每个案例均含完整的页面配置、…

2026/10/17 6:17:45 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →