如果你是一名在龙芯平台上工作的开发者或者你的团队正在推进国产化技术栈的落地那么你很可能遇到过这样一个困境想用 Docker 部署一个像 Nexus 这样的企业级仓库管理器却发现官方镜像根本不支持龙芯架构。这不仅仅是“装不上”的问题它背后折射出的是国产化生态中一个普遍且关键的挑战——如何将成熟的、基于 x86/ARM 生态的 DevOps 工具链平滑地迁移到 LoongArch 架构上。这篇文章要解决的正是这个痛点。我们将以“在龙芯 3B6000 上使用 Docker 部署 Nexus”为具体场景进行一次完整的实战演练。这不仅仅是一个安装教程更是一次对国产化环境下软件部署逻辑的深度剖析。你会发现核心难点往往不在于命令本身而在于对架构差异的理解、对镜像生态的适配以及对部署后稳定性的把控。通过本文你将获得一个清晰、可复现的部署路径。更重要的是你会理解在龙芯平台上进行容器化部署的通用思路掌握如何寻找和验证适配镜像如何排查因架构差异导致的各类“诡异”问题。这对于你后续部署其他中间件如 MySQL、Redis、Nginx具有直接的参考价值。让我们开始吧。1. 为什么在龙芯上部署 Nexus 是个值得深究的技术问题在 x86 服务器上docker run sonatype/nexus3可能只是一条简单的命令。但在龙芯平台上这条命令会直接失败报错“no matching manifest for linux/loong64 in the manifest list entries”。这个错误信息揭示了一个根本性的技术鸿沟Docker 镜像是与特定 CPU 架构绑定的。主流的sonatype/nexus3镜像只提供了linux/amd64(x86) 和linux/arm64(ARM) 的版本缺少linux/loong64(龙芯) 的支持。那么我们面临几个选择放弃容器化采用传统方式安装这需要手动安装 Java、下载 Nexus 的 war 包或二进制包、配置系统服务。过程繁琐环境隔离性差与团队既有的 Docker 化运维流程脱节。自己从源码编译构建 LoongArch64 架构的 Nexus 镜像这需要对 Nexus 的构建体系、依赖库有深入理解技术门槛高且后续版本升级维护成本巨大。寻找社区已构建好的、可信的 LoongArch64 架构镜像这是最务实、最高效的路径。幸运的是龙芯社区和开源贡献者已经在做这件事。根据网络搜索材料我们在 Docker Hub 上发现了loongarch64这个组织其中维护了loongarch64/nexus和loongarch64/nexus-pro镜像。这为我们提供了关键的“弹药”。本文的核心任务就是基于这个社区镜像在龙芯 3B6000 服务器上完成 Nexus 的 Docker 化部署、配置和基础使用并梳理出其中的关键步骤和避坑指南。2. 核心概念与准备工作理解我们的“战场”在开始动手之前我们需要明确几个关键概念这能帮助你在遇到问题时快速定位。龙芯 3B6000 与 LoongArch64 架构龙芯 3B6000 是龙芯中科推出的通用处理器采用完全自主的 LoongArch 指令集。在软件生态中其对应的架构标识通常为loongarch64。在 Linux 系统中可以通过uname -m命令查看输出应为loongarch64。这是所有软件兼容性的基石。Docker 多架构镜像与 Manifest List一个 Docker 镜像仓库地址如sonatype/nexus3背后可能对应多个不同架构的镜像实体。Docker Hub 通过一个“清单列表”来管理它们。当你在 AMD64 机器上拉取时Docker 客户端会自动选择linux/amd64的镜像在 ARM64 机器上则选择linux/arm64。由于sonatype/nexus3的清单列表里没有linux/loong64的条目所以拉取失败。而loongarch64/nexus镜像的清单列表里则包含了针对linux/loong64的镜像。Nexus Repository Manager 是什么它是一个强大的仓库管理器主要用于代理和缓存远程仓库如 Maven Central, npm Registry, Docker Hub 等以及托管私有组件。它能显著提升内部团队的构建下载速度降低对外网依赖并统一管理内部制品。通常我们使用其开源版本 Nexus Repository OSS。本次部署的技术栈全景硬件龙芯 3B6000 服务器操作系统统信 UOS 或麒麟 Kylin 等基于 Linux 的国产操作系统或社区版 Loongnix容器引擎Docker必须支持loongarch64架构目标镜像loongarch64/nexus(基于sonatype/nexus3构建的 LoongArch64 版本)部署方式Docker 单容器部署暂不涉及 Docker Compose 或 Kubernetes但原理相通3. 环境准备确保龙芯服务器“容器就绪”假设你已拥有一台安装了国产操作系统的龙芯 3B6000 服务器并通过 SSH 登录。我们首先需要确认和安装必要的软件环境。3.1 确认系统架构与内核版本打开终端执行以下命令# 1. 确认CPU架构为loongarch64 uname -m # 预期输出loongarch64 # 2. 查看操作系统发行版信息确认基础环境 cat /etc/os-release # 预期输出会包含类似 NAMEUnionTech OS Server 20 或 NAMEKylin Linux Advanced Server 的信息 # 3. 查看内核版本确保较新建议3.10以上 uname -r3.2 安装 Docker 引擎龙芯平台上的 Docker 安装方法与常见 Linux 发行版类似但软件源地址不同。以下以通用方式说明具体源地址请根据你的操作系统调整。# 1. 卸载旧版本如有 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 或使用 apt-get # sudo apt-get remove docker docker-engine docker.io containerd runc # 2. 安装必要的依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 或 # sudo apt-get update # sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release # 3. 添加 Docker 的官方 GPG 密钥和软件源此处是关键需使用龙芯适配的源 # 请注意Docker 官方并不直接提供 loongarch64 的二进制包。通常由操作系统厂商或社区提供。 # 例如在统信UOS上可能已经内置了docker.io包。 # 最可靠的方式是查阅你的操作系统官方文档获取正确的安装命令。 # 示例假设你的系统使用 yum/dnf且已配置好龙芯的软件源可能包含docker sudo yum makecache sudo yum install -y docker-ce docker-ce-cli containerd.io # 4. 启动 Docker 服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 5. 验证 Docker 安装成功且识别 loongarch64 架构 sudo docker version # 在 Client 和 Server 的 OS/Arch 行应看到 linux/loongarch64 sudo docker info | grep Architecture # 应输出Architecture: loongarch64重要提醒如果通过系统包管理器找不到docker-ce你可能需要从龙芯社区或操作系统厂商处获取适配的 Docker 二进制包进行手动安装。这是龙芯平台部署的第一个常见门槛。3.3 配置 Docker 镜像加速器可选但推荐为了提升拉取镜像的速度特别是从 Docker Hub 拉取基础镜像时建议配置国内镜像加速器。但需要注意加速器通常只缓存主流架构镜像对于loongarch64镜像可能无效。不过配置后拉取alpine:latest等跨架构镜像时会快很多。创建或编辑/etc/docker/daemon.json文件{ registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 }保存后重启 Docker 服务sudo systemctl daemon-reload sudo systemctl restart docker4. 拉取与验证 LoongArch64 架构的 Nexus 镜像这是最关键的一步。我们将使用社区维护的镜像。# 1. 搜索并拉取镜像 sudo docker pull loongarch64/nexus # 或者指定版本例如请以Docker Hub上显示的标签为准 # sudo docker pull loongarch64/nexus:latest # 2. 拉取完成后查看镜像详情 sudo docker images loongarch64/nexus # 你应该能看到 REPOSITORY, TAG, IMAGE ID, CREATED, SIZE 等信息 # 3. 检查该镜像的架构 sudo docker inspect loongarch64/nexus:latest | grep Architecture # 预期输出 Architecture: loongarch64注意loongarch64/nexus镜像很可能基于loongarch64/alpine或loongarch64/centos等基础镜像构建。确保你的 Docker 能够正常拉取这些基础镜像。5. 部署 Nexus容器运行与持久化配置我们不建议使用docker run时附带一大堆参数而是采用更易维护的 Docker Compose 方式。但为了清晰展示每一步我们先从docker run命令开始。5.1 创建持久化数据目录Nexus 的数据仓库内容、配置、日志必须存储在宿主机上否则容器重启后所有数据都会丢失。# 选择一个合适的目录例如 /opt/docker-data sudo mkdir -p /opt/docker-data/nexus-data # 非常重要修改目录权限使得容器内的用户默认uid 200可以写入 sudo chown -R 200:200 /opt/docker-data/nexus-data # 查看权限 ls -ld /opt/docker-data/nexus-data # 应显示所有者owner和组group的数字ID为200或已被正确修改。5.2 使用 Docker Run 启动容器基础版sudo docker run -d \ --name nexus \ --restart unless-stopped \ -p 8081:8081 \ -v /opt/docker-data/nexus-data:/nexus-data \ loongarch64/nexus:latest参数解释-d: 后台运行。--name nexus: 为容器命名便于管理。--restart unless-stopped: 设置重启策略除非手动停止否则异常退出时自动重启。-p 8081:8081: 端口映射将容器内的 8081 端口映射到宿主机的 8081 端口。-v /opt/docker-data/nexus-data:/nexus-data: 数据卷挂载将宿主机目录挂载到容器内的/nexus-data路径这是 Nexus 镜像默认的数据目录。5.3 使用 Docker Compose 部署推荐对于生产环境或长期使用Docker Compose 能更好地管理服务配置。首先确保已安装docker-compose龙芯平台可能需要从源码编译或找对应二进制包。创建docker-compose.yml文件version: 3.8 services: nexus: image: loongarch64/nexus:latest container_name: nexus restart: unless-stopped ports: - 8081:8081 volumes: - ./nexus-data:/nexus-data environment: - INSTALL4J_ADD_VM_PARAMS-Xms512m -Xmx1024m -XX:MaxDirectMemorySize2g # 如果需要可以设置 ulimits 解决文件句柄数不足问题 # ulimits: # nofile: # soft: 65536 # hard: 65536在包含docker-compose.yml文件的目录下执行# 启动服务 sudo docker-compose up -d # 查看服务状态 sudo docker-compose ps # 查看日志 sudo docker-compose logs -f nexus关键点解析数据卷我们使用了相对路径./nexus-dataCompose 会自动在当前目录下创建该文件夹。同样需要确保其权限chown -R 200:200 nexus-data。JVM 参数通过INSTALL4J_ADD_VM_PARAMS环境变量调整 Nexus 的 Java 虚拟机参数。-Xms和-Xmx分别设置堆内存初始大小和最大值。根据服务器物理内存调整建议至少-Xmx1024m。ulimitsNexus 在大量并发时可能需要更多文件描述符。如果遇到相关错误可以取消注释ulimits部分。6. 初始化访问与基础配置6.1 等待服务启动并获取管理员密码Nexus 首次启动需要较长时间可能几分钟来初始化数据。# 持续查看日志等待初始化完成 sudo docker logs -f nexus # 或者使用 docker-compose # sudo docker-compose logs -f nexus在日志中你会看到类似以下的输出其中包含自动生成的 admin 用户密码------------------------------------------------- Started Sonatype Nexus OSS 3.x.yy.z ------------------------------------------------- ... Generated admin password: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx请务必记录这个密码。你也可以在挂载的数据目录中找到它cat /opt/docker-data/nexus-data/admin.password6.2 登录 Web 界面进行初始化打开浏览器访问http://你的服务器IP:8081。点击右上角 “Sign in”用户名输入admin密码输入上一步获取的随机密码。登录后系统会强制你修改密码。请设置一个强密码并妥善保管。随后会提示是否启用匿名访问。建议根据安全策略选择。对于内网测试环境可以启用以方便构建工具拉取公共组件对于生产环境建议禁用并配置严格的用户权限。6.3 配置仓库与代理以 Maven 为例登录后点击顶部齿轮图标进入“Administration”管理界面。创建代理仓库Proxy Repository左侧导航栏进入Repository-Repositories。点击Create repository。选择maven2 (proxy)。填写基本信息Name:maven-central(可自定义)Remote storage:https://repo1.maven.org/maven2/(这是 Maven Central 的地址)其他配置如Blob store、Version policy等可保持默认点击Create repository保存。创建本地仓库Hosted Repository同样点击Create repository。选择maven2 (hosted)。填写信息如 Name:maven-releasesVersion policy 选择Release。可以再创建一个maven-snapshotsVersion policy 选择Snapshot。创建仓库组Repository Group点击Create repository选择maven2 (group)。填写 Name如maven-public。在Member repositories列表中将刚才创建的maven-central(代理仓库) 和maven-releases、maven-snapshots(本地仓库) 从左侧移到右侧。通过拖拽调整顺序越靠上优先级越高。点击Create repository。现在你的 Maven 客户端就可以通过这个仓库组地址http://服务器IP:8081/repository/maven-public/来访问了它会自动代理中央仓库并包含你的私有制品。7. 客户端配置与使用验证部署好服务端后需要在开发机器上验证其可用性。7.1 Maven 客户端配置修改你的 Maven 配置文件 (~/.m2/settings.xml)添加镜像和服务器配置settings mirrors mirror idnexus-loongarch/id nameNexus on LoongArch/name urlhttp://你的Nexus服务器IP:8081/repository/maven-public//url mirrorOf*/mirrorOf !-- 匹配所有仓库所有请求都走这个镜像 -- /mirror /mirrors servers !-- 如果需要部署构件到Nexus的hosted仓库需要配置认证 -- server idnexus-releases/id usernameadmin/username password你的管理员密码/password /server server idnexus-snapshots/id usernameadmin/username password你的管理员密码/password /server /servers /settings7.2 执行构建测试在你的 Maven 项目中执行一个简单的构建命令观察是否从你的 Nexus 服务器下载依赖mvn clean compile -U # -U 参数强制更新快照可以更明显地看到下载过程查看 Nexus 管理界面 (Browse-maven-central)如果配置成功你会看到缓存的依赖文件。7.3 部署构件测试在项目的pom.xml中配置分发仓库distributionManagement repository idnexus-releases/id urlhttp://你的Nexus服务器IP:8081/repository/maven-releases//url /repository snapshotRepository idnexus-snapshots/id urlhttp://你的Nexus服务器IP:8081/repository/maven-snapshots//url /snapshotRepository /distributionManagement然后执行部署命令mvn clean deploy成功后在 Nexus 界面Browse-maven-releases或maven-snapshots中应该能看到你上传的构件。8. 常见问题与深度排查指南在龙芯平台上部署除了通用问题还可能遇到架构特有的问题。下表总结了常见问题及解决方法问题现象可能原因排查方式解决方案docker pull失败提示no matching manifest1. 镜像名错误。2. 该镜像确实无loongarch64版本。docker manifest inspect 镜像名(需开启实验性功能) 或直接去 Docker Hub 页面查看Tags。确认使用正确的镜像名如loongarch64/nexus。寻找其他社区构建的镜像或自行构建。容器启动后立即退出1. 数据目录权限错误。2. JVM 内存参数不足或服务器内存不足。3. 镜像本身有问题不兼容。docker logs nexus查看退出前的日志。检查docker inspect nexus中的State。1. 确保数据目录 (/nexus-data) 对 uid 200 可写 (chown -R 200:200)。2. 调整INSTALL4J_ADD_VM_PARAMS环境变量减小-Xmx。3. 尝试拉取更早或更新的镜像标签。能访问8081端口但页面加载慢或报错1. Nexus 仍在初始化。2. 服务器资源CPU/内存不足。3. 数据库内嵌的 OrientDB初始化问题。查看容器日志docker logs -f nexus。使用docker stats nexus监控容器资源占用。1. 耐心等待首次启动可能需5-10分钟。2. 为容器分配更多内存或升级服务器配置。3. 检查数据卷是否损坏可尝试清空nexus-data目录注意备份后重启。Maven 构建时无法从 Nexus 下载依赖1. 网络不通或防火墙。2. Nexus 仓库组配置错误。3.settings.xml配置错误。1. 在服务器上curl http://localhost:8081测试。2. 在客户端curl http://服务器IP:8081/repository/maven-public/测试。3. 检查 Nexus 界面对应仓库是否有内容。1. 开放防火墙8081端口。2. 检查仓库组的成员顺序确保代理仓库在内。3. 检查 Mavensettings.xml的mirrorOf和 URL 是否正确。上传构件到 Nexus 失败 (401/403)1.settings.xml中server的 id 与pom.xml中id不匹配。2. 用户名密码错误。3. 用户权限不足。检查 Maven 错误日志。在 Nexus 界面Administration-Security-Users确认用户状态和角色。1. 确保settings.xml的serverid与pom.xml的repositoryid完全一致。2. 重置密码或创建专用部署用户。3. 为用户分配nx-deploy权限。日志中出现Unable to load或LinkageError等 JNI 错误龙芯平台特有风险镜像内的某些 Native 库如数据库驱动、压缩库可能未针对loongarch64编译或编译有问题。仔细查看错误日志定位是哪个 jar 包或哪个库文件。1. 尝试寻找该 Native 库的loongarch64版本替换到镜像中需自行构建镜像。2. 如果功能非核心尝试在 Nexus 配置中禁用相关功能。3. 向镜像维护者反馈问题。针对龙芯平台的特别提醒如果遇到任何与glibc版本、ELF文件格式或JVM崩溃相关的问题首先要怀疑基础镜像 (loongarch64/alpine等) 与宿主机系统库的兼容性。此时考虑使用与宿主机发行版更接近的基础镜像如loongarch64/openeuler重新构建 Nexus 镜像可能是更彻底的解决方案。9. 生产环境最佳实践与进阶思考将 Nexus 用于生产环境除了能跑起来还需要考虑安全、性能和可维护性。安全加固务必修改默认密码这是第一步。禁用匿名访问在Administration-Security-Anonymous中设置。创建专属用户和角色不要一直使用admin。为不同团队创建具有最小权限的用户如只读、部署等。启用 HTTPS使用 Nginx 或 Traefik 作为反向代理配置 SSL 证书。容器内 Nexus 本身也支持 HTTPS 配置但更推荐在外部代理层处理。网络隔离将 Nexus 容器放在内部网络仅通过反向代理暴露必要端口。性能与高可用资源限制在docker-compose.yml中为容器设置合理的 CPU 和内存限制 (deploy.resources.limits)。使用独立的 Blob 存储Nexus 支持将二进制大对象存储在 S3、Azure Blob 等外部存储便于扩展和备份。对于自建存储可以挂载高性能 SSD 或分布式存储卷。定期清理策略在Administration-Repository-Tasks中创建定时任务清理旧的快照、释放存储空间。备份策略定期备份/nexus-data目录。Nexus 也提供了backup和restore的 Admin 任务。维护与监控日志收集将容器的日志 (/nexus-data/log) 通过 Docker 的日志驱动如json-file,syslog或ELK栈收集起来。健康检查Nexus 提供了/service/rest/v1/status等健康检查端点可以配置到 Docker Compose 或 Kubernetes 的探针中。版本升级社区镜像的更新可能滞后于官方。升级前务必在测试环境完整备份数据并验证新版本镜像的兼容性。升级流程通常是拉取新镜像 - 停止旧容器 - 备份数据卷 - 用新镜像启动容器挂载原数据卷。龙芯生态下的持续集成 部署好 Nexus 后你可以将其作为龙芯平台 CI/CD 流水线的核心一环。例如在基于龙芯的 Jenkins 或 GitLab Runner 节点上所有构建工具的依赖都通过这台 Nexus 代理获取构建产生的loongarch64架构的制品如 Jar 包、Docker 镜像也推送到 Nexus 的私有仓库中。这能极大加速构建过程并形成自主可控的制品供应链。通过以上步骤你不仅成功在龙芯 3B6000 上部署了 Nexus更重要的是你走通了一条在非主流架构上部署复杂应用的标准路径确认架构支持 - 寻找或构建适配镜像 - 解决权限与依赖问题 - 配置与验证 - 规划生产级运维。这套方法论对于在龙芯、申威等国产 CPU 上部署 Redis、MySQL、Nginx 乃至更复杂的微服务套件都具有极高的参考价值。技术自主化的道路充满挑战但每一步扎实的实践都是在为整个生态添砖加瓦。建议你将此配置过程文档化并分享给团队成为你们国产化技术栈中的一块坚实基石。
龙芯平台实战:基于Docker部署Nexus仓库管理器的完整指南
如果你是一名在龙芯平台上工作的开发者或者你的团队正在推进国产化技术栈的落地那么你很可能遇到过这样一个困境想用 Docker 部署一个像 Nexus 这样的企业级仓库管理器却发现官方镜像根本不支持龙芯架构。这不仅仅是“装不上”的问题它背后折射出的是国产化生态中一个普遍且关键的挑战——如何将成熟的、基于 x86/ARM 生态的 DevOps 工具链平滑地迁移到 LoongArch 架构上。这篇文章要解决的正是这个痛点。我们将以“在龙芯 3B6000 上使用 Docker 部署 Nexus”为具体场景进行一次完整的实战演练。这不仅仅是一个安装教程更是一次对国产化环境下软件部署逻辑的深度剖析。你会发现核心难点往往不在于命令本身而在于对架构差异的理解、对镜像生态的适配以及对部署后稳定性的把控。通过本文你将获得一个清晰、可复现的部署路径。更重要的是你会理解在龙芯平台上进行容器化部署的通用思路掌握如何寻找和验证适配镜像如何排查因架构差异导致的各类“诡异”问题。这对于你后续部署其他中间件如 MySQL、Redis、Nginx具有直接的参考价值。让我们开始吧。1. 为什么在龙芯上部署 Nexus 是个值得深究的技术问题在 x86 服务器上docker run sonatype/nexus3可能只是一条简单的命令。但在龙芯平台上这条命令会直接失败报错“no matching manifest for linux/loong64 in the manifest list entries”。这个错误信息揭示了一个根本性的技术鸿沟Docker 镜像是与特定 CPU 架构绑定的。主流的sonatype/nexus3镜像只提供了linux/amd64(x86) 和linux/arm64(ARM) 的版本缺少linux/loong64(龙芯) 的支持。那么我们面临几个选择放弃容器化采用传统方式安装这需要手动安装 Java、下载 Nexus 的 war 包或二进制包、配置系统服务。过程繁琐环境隔离性差与团队既有的 Docker 化运维流程脱节。自己从源码编译构建 LoongArch64 架构的 Nexus 镜像这需要对 Nexus 的构建体系、依赖库有深入理解技术门槛高且后续版本升级维护成本巨大。寻找社区已构建好的、可信的 LoongArch64 架构镜像这是最务实、最高效的路径。幸运的是龙芯社区和开源贡献者已经在做这件事。根据网络搜索材料我们在 Docker Hub 上发现了loongarch64这个组织其中维护了loongarch64/nexus和loongarch64/nexus-pro镜像。这为我们提供了关键的“弹药”。本文的核心任务就是基于这个社区镜像在龙芯 3B6000 服务器上完成 Nexus 的 Docker 化部署、配置和基础使用并梳理出其中的关键步骤和避坑指南。2. 核心概念与准备工作理解我们的“战场”在开始动手之前我们需要明确几个关键概念这能帮助你在遇到问题时快速定位。龙芯 3B6000 与 LoongArch64 架构龙芯 3B6000 是龙芯中科推出的通用处理器采用完全自主的 LoongArch 指令集。在软件生态中其对应的架构标识通常为loongarch64。在 Linux 系统中可以通过uname -m命令查看输出应为loongarch64。这是所有软件兼容性的基石。Docker 多架构镜像与 Manifest List一个 Docker 镜像仓库地址如sonatype/nexus3背后可能对应多个不同架构的镜像实体。Docker Hub 通过一个“清单列表”来管理它们。当你在 AMD64 机器上拉取时Docker 客户端会自动选择linux/amd64的镜像在 ARM64 机器上则选择linux/arm64。由于sonatype/nexus3的清单列表里没有linux/loong64的条目所以拉取失败。而loongarch64/nexus镜像的清单列表里则包含了针对linux/loong64的镜像。Nexus Repository Manager 是什么它是一个强大的仓库管理器主要用于代理和缓存远程仓库如 Maven Central, npm Registry, Docker Hub 等以及托管私有组件。它能显著提升内部团队的构建下载速度降低对外网依赖并统一管理内部制品。通常我们使用其开源版本 Nexus Repository OSS。本次部署的技术栈全景硬件龙芯 3B6000 服务器操作系统统信 UOS 或麒麟 Kylin 等基于 Linux 的国产操作系统或社区版 Loongnix容器引擎Docker必须支持loongarch64架构目标镜像loongarch64/nexus(基于sonatype/nexus3构建的 LoongArch64 版本)部署方式Docker 单容器部署暂不涉及 Docker Compose 或 Kubernetes但原理相通3. 环境准备确保龙芯服务器“容器就绪”假设你已拥有一台安装了国产操作系统的龙芯 3B6000 服务器并通过 SSH 登录。我们首先需要确认和安装必要的软件环境。3.1 确认系统架构与内核版本打开终端执行以下命令# 1. 确认CPU架构为loongarch64 uname -m # 预期输出loongarch64 # 2. 查看操作系统发行版信息确认基础环境 cat /etc/os-release # 预期输出会包含类似 NAMEUnionTech OS Server 20 或 NAMEKylin Linux Advanced Server 的信息 # 3. 查看内核版本确保较新建议3.10以上 uname -r3.2 安装 Docker 引擎龙芯平台上的 Docker 安装方法与常见 Linux 发行版类似但软件源地址不同。以下以通用方式说明具体源地址请根据你的操作系统调整。# 1. 卸载旧版本如有 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 或使用 apt-get # sudo apt-get remove docker docker-engine docker.io containerd runc # 2. 安装必要的依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 或 # sudo apt-get update # sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release # 3. 添加 Docker 的官方 GPG 密钥和软件源此处是关键需使用龙芯适配的源 # 请注意Docker 官方并不直接提供 loongarch64 的二进制包。通常由操作系统厂商或社区提供。 # 例如在统信UOS上可能已经内置了docker.io包。 # 最可靠的方式是查阅你的操作系统官方文档获取正确的安装命令。 # 示例假设你的系统使用 yum/dnf且已配置好龙芯的软件源可能包含docker sudo yum makecache sudo yum install -y docker-ce docker-ce-cli containerd.io # 4. 启动 Docker 服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 5. 验证 Docker 安装成功且识别 loongarch64 架构 sudo docker version # 在 Client 和 Server 的 OS/Arch 行应看到 linux/loongarch64 sudo docker info | grep Architecture # 应输出Architecture: loongarch64重要提醒如果通过系统包管理器找不到docker-ce你可能需要从龙芯社区或操作系统厂商处获取适配的 Docker 二进制包进行手动安装。这是龙芯平台部署的第一个常见门槛。3.3 配置 Docker 镜像加速器可选但推荐为了提升拉取镜像的速度特别是从 Docker Hub 拉取基础镜像时建议配置国内镜像加速器。但需要注意加速器通常只缓存主流架构镜像对于loongarch64镜像可能无效。不过配置后拉取alpine:latest等跨架构镜像时会快很多。创建或编辑/etc/docker/daemon.json文件{ registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 }保存后重启 Docker 服务sudo systemctl daemon-reload sudo systemctl restart docker4. 拉取与验证 LoongArch64 架构的 Nexus 镜像这是最关键的一步。我们将使用社区维护的镜像。# 1. 搜索并拉取镜像 sudo docker pull loongarch64/nexus # 或者指定版本例如请以Docker Hub上显示的标签为准 # sudo docker pull loongarch64/nexus:latest # 2. 拉取完成后查看镜像详情 sudo docker images loongarch64/nexus # 你应该能看到 REPOSITORY, TAG, IMAGE ID, CREATED, SIZE 等信息 # 3. 检查该镜像的架构 sudo docker inspect loongarch64/nexus:latest | grep Architecture # 预期输出 Architecture: loongarch64注意loongarch64/nexus镜像很可能基于loongarch64/alpine或loongarch64/centos等基础镜像构建。确保你的 Docker 能够正常拉取这些基础镜像。5. 部署 Nexus容器运行与持久化配置我们不建议使用docker run时附带一大堆参数而是采用更易维护的 Docker Compose 方式。但为了清晰展示每一步我们先从docker run命令开始。5.1 创建持久化数据目录Nexus 的数据仓库内容、配置、日志必须存储在宿主机上否则容器重启后所有数据都会丢失。# 选择一个合适的目录例如 /opt/docker-data sudo mkdir -p /opt/docker-data/nexus-data # 非常重要修改目录权限使得容器内的用户默认uid 200可以写入 sudo chown -R 200:200 /opt/docker-data/nexus-data # 查看权限 ls -ld /opt/docker-data/nexus-data # 应显示所有者owner和组group的数字ID为200或已被正确修改。5.2 使用 Docker Run 启动容器基础版sudo docker run -d \ --name nexus \ --restart unless-stopped \ -p 8081:8081 \ -v /opt/docker-data/nexus-data:/nexus-data \ loongarch64/nexus:latest参数解释-d: 后台运行。--name nexus: 为容器命名便于管理。--restart unless-stopped: 设置重启策略除非手动停止否则异常退出时自动重启。-p 8081:8081: 端口映射将容器内的 8081 端口映射到宿主机的 8081 端口。-v /opt/docker-data/nexus-data:/nexus-data: 数据卷挂载将宿主机目录挂载到容器内的/nexus-data路径这是 Nexus 镜像默认的数据目录。5.3 使用 Docker Compose 部署推荐对于生产环境或长期使用Docker Compose 能更好地管理服务配置。首先确保已安装docker-compose龙芯平台可能需要从源码编译或找对应二进制包。创建docker-compose.yml文件version: 3.8 services: nexus: image: loongarch64/nexus:latest container_name: nexus restart: unless-stopped ports: - 8081:8081 volumes: - ./nexus-data:/nexus-data environment: - INSTALL4J_ADD_VM_PARAMS-Xms512m -Xmx1024m -XX:MaxDirectMemorySize2g # 如果需要可以设置 ulimits 解决文件句柄数不足问题 # ulimits: # nofile: # soft: 65536 # hard: 65536在包含docker-compose.yml文件的目录下执行# 启动服务 sudo docker-compose up -d # 查看服务状态 sudo docker-compose ps # 查看日志 sudo docker-compose logs -f nexus关键点解析数据卷我们使用了相对路径./nexus-dataCompose 会自动在当前目录下创建该文件夹。同样需要确保其权限chown -R 200:200 nexus-data。JVM 参数通过INSTALL4J_ADD_VM_PARAMS环境变量调整 Nexus 的 Java 虚拟机参数。-Xms和-Xmx分别设置堆内存初始大小和最大值。根据服务器物理内存调整建议至少-Xmx1024m。ulimitsNexus 在大量并发时可能需要更多文件描述符。如果遇到相关错误可以取消注释ulimits部分。6. 初始化访问与基础配置6.1 等待服务启动并获取管理员密码Nexus 首次启动需要较长时间可能几分钟来初始化数据。# 持续查看日志等待初始化完成 sudo docker logs -f nexus # 或者使用 docker-compose # sudo docker-compose logs -f nexus在日志中你会看到类似以下的输出其中包含自动生成的 admin 用户密码------------------------------------------------- Started Sonatype Nexus OSS 3.x.yy.z ------------------------------------------------- ... Generated admin password: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx请务必记录这个密码。你也可以在挂载的数据目录中找到它cat /opt/docker-data/nexus-data/admin.password6.2 登录 Web 界面进行初始化打开浏览器访问http://你的服务器IP:8081。点击右上角 “Sign in”用户名输入admin密码输入上一步获取的随机密码。登录后系统会强制你修改密码。请设置一个强密码并妥善保管。随后会提示是否启用匿名访问。建议根据安全策略选择。对于内网测试环境可以启用以方便构建工具拉取公共组件对于生产环境建议禁用并配置严格的用户权限。6.3 配置仓库与代理以 Maven 为例登录后点击顶部齿轮图标进入“Administration”管理界面。创建代理仓库Proxy Repository左侧导航栏进入Repository-Repositories。点击Create repository。选择maven2 (proxy)。填写基本信息Name:maven-central(可自定义)Remote storage:https://repo1.maven.org/maven2/(这是 Maven Central 的地址)其他配置如Blob store、Version policy等可保持默认点击Create repository保存。创建本地仓库Hosted Repository同样点击Create repository。选择maven2 (hosted)。填写信息如 Name:maven-releasesVersion policy 选择Release。可以再创建一个maven-snapshotsVersion policy 选择Snapshot。创建仓库组Repository Group点击Create repository选择maven2 (group)。填写 Name如maven-public。在Member repositories列表中将刚才创建的maven-central(代理仓库) 和maven-releases、maven-snapshots(本地仓库) 从左侧移到右侧。通过拖拽调整顺序越靠上优先级越高。点击Create repository。现在你的 Maven 客户端就可以通过这个仓库组地址http://服务器IP:8081/repository/maven-public/来访问了它会自动代理中央仓库并包含你的私有制品。7. 客户端配置与使用验证部署好服务端后需要在开发机器上验证其可用性。7.1 Maven 客户端配置修改你的 Maven 配置文件 (~/.m2/settings.xml)添加镜像和服务器配置settings mirrors mirror idnexus-loongarch/id nameNexus on LoongArch/name urlhttp://你的Nexus服务器IP:8081/repository/maven-public//url mirrorOf*/mirrorOf !-- 匹配所有仓库所有请求都走这个镜像 -- /mirror /mirrors servers !-- 如果需要部署构件到Nexus的hosted仓库需要配置认证 -- server idnexus-releases/id usernameadmin/username password你的管理员密码/password /server server idnexus-snapshots/id usernameadmin/username password你的管理员密码/password /server /servers /settings7.2 执行构建测试在你的 Maven 项目中执行一个简单的构建命令观察是否从你的 Nexus 服务器下载依赖mvn clean compile -U # -U 参数强制更新快照可以更明显地看到下载过程查看 Nexus 管理界面 (Browse-maven-central)如果配置成功你会看到缓存的依赖文件。7.3 部署构件测试在项目的pom.xml中配置分发仓库distributionManagement repository idnexus-releases/id urlhttp://你的Nexus服务器IP:8081/repository/maven-releases//url /repository snapshotRepository idnexus-snapshots/id urlhttp://你的Nexus服务器IP:8081/repository/maven-snapshots//url /snapshotRepository /distributionManagement然后执行部署命令mvn clean deploy成功后在 Nexus 界面Browse-maven-releases或maven-snapshots中应该能看到你上传的构件。8. 常见问题与深度排查指南在龙芯平台上部署除了通用问题还可能遇到架构特有的问题。下表总结了常见问题及解决方法问题现象可能原因排查方式解决方案docker pull失败提示no matching manifest1. 镜像名错误。2. 该镜像确实无loongarch64版本。docker manifest inspect 镜像名(需开启实验性功能) 或直接去 Docker Hub 页面查看Tags。确认使用正确的镜像名如loongarch64/nexus。寻找其他社区构建的镜像或自行构建。容器启动后立即退出1. 数据目录权限错误。2. JVM 内存参数不足或服务器内存不足。3. 镜像本身有问题不兼容。docker logs nexus查看退出前的日志。检查docker inspect nexus中的State。1. 确保数据目录 (/nexus-data) 对 uid 200 可写 (chown -R 200:200)。2. 调整INSTALL4J_ADD_VM_PARAMS环境变量减小-Xmx。3. 尝试拉取更早或更新的镜像标签。能访问8081端口但页面加载慢或报错1. Nexus 仍在初始化。2. 服务器资源CPU/内存不足。3. 数据库内嵌的 OrientDB初始化问题。查看容器日志docker logs -f nexus。使用docker stats nexus监控容器资源占用。1. 耐心等待首次启动可能需5-10分钟。2. 为容器分配更多内存或升级服务器配置。3. 检查数据卷是否损坏可尝试清空nexus-data目录注意备份后重启。Maven 构建时无法从 Nexus 下载依赖1. 网络不通或防火墙。2. Nexus 仓库组配置错误。3.settings.xml配置错误。1. 在服务器上curl http://localhost:8081测试。2. 在客户端curl http://服务器IP:8081/repository/maven-public/测试。3. 检查 Nexus 界面对应仓库是否有内容。1. 开放防火墙8081端口。2. 检查仓库组的成员顺序确保代理仓库在内。3. 检查 Mavensettings.xml的mirrorOf和 URL 是否正确。上传构件到 Nexus 失败 (401/403)1.settings.xml中server的 id 与pom.xml中id不匹配。2. 用户名密码错误。3. 用户权限不足。检查 Maven 错误日志。在 Nexus 界面Administration-Security-Users确认用户状态和角色。1. 确保settings.xml的serverid与pom.xml的repositoryid完全一致。2. 重置密码或创建专用部署用户。3. 为用户分配nx-deploy权限。日志中出现Unable to load或LinkageError等 JNI 错误龙芯平台特有风险镜像内的某些 Native 库如数据库驱动、压缩库可能未针对loongarch64编译或编译有问题。仔细查看错误日志定位是哪个 jar 包或哪个库文件。1. 尝试寻找该 Native 库的loongarch64版本替换到镜像中需自行构建镜像。2. 如果功能非核心尝试在 Nexus 配置中禁用相关功能。3. 向镜像维护者反馈问题。针对龙芯平台的特别提醒如果遇到任何与glibc版本、ELF文件格式或JVM崩溃相关的问题首先要怀疑基础镜像 (loongarch64/alpine等) 与宿主机系统库的兼容性。此时考虑使用与宿主机发行版更接近的基础镜像如loongarch64/openeuler重新构建 Nexus 镜像可能是更彻底的解决方案。9. 生产环境最佳实践与进阶思考将 Nexus 用于生产环境除了能跑起来还需要考虑安全、性能和可维护性。安全加固务必修改默认密码这是第一步。禁用匿名访问在Administration-Security-Anonymous中设置。创建专属用户和角色不要一直使用admin。为不同团队创建具有最小权限的用户如只读、部署等。启用 HTTPS使用 Nginx 或 Traefik 作为反向代理配置 SSL 证书。容器内 Nexus 本身也支持 HTTPS 配置但更推荐在外部代理层处理。网络隔离将 Nexus 容器放在内部网络仅通过反向代理暴露必要端口。性能与高可用资源限制在docker-compose.yml中为容器设置合理的 CPU 和内存限制 (deploy.resources.limits)。使用独立的 Blob 存储Nexus 支持将二进制大对象存储在 S3、Azure Blob 等外部存储便于扩展和备份。对于自建存储可以挂载高性能 SSD 或分布式存储卷。定期清理策略在Administration-Repository-Tasks中创建定时任务清理旧的快照、释放存储空间。备份策略定期备份/nexus-data目录。Nexus 也提供了backup和restore的 Admin 任务。维护与监控日志收集将容器的日志 (/nexus-data/log) 通过 Docker 的日志驱动如json-file,syslog或ELK栈收集起来。健康检查Nexus 提供了/service/rest/v1/status等健康检查端点可以配置到 Docker Compose 或 Kubernetes 的探针中。版本升级社区镜像的更新可能滞后于官方。升级前务必在测试环境完整备份数据并验证新版本镜像的兼容性。升级流程通常是拉取新镜像 - 停止旧容器 - 备份数据卷 - 用新镜像启动容器挂载原数据卷。龙芯生态下的持续集成 部署好 Nexus 后你可以将其作为龙芯平台 CI/CD 流水线的核心一环。例如在基于龙芯的 Jenkins 或 GitLab Runner 节点上所有构建工具的依赖都通过这台 Nexus 代理获取构建产生的loongarch64架构的制品如 Jar 包、Docker 镜像也推送到 Nexus 的私有仓库中。这能极大加速构建过程并形成自主可控的制品供应链。通过以上步骤你不仅成功在龙芯 3B6000 上部署了 Nexus更重要的是你走通了一条在非主流架构上部署复杂应用的标准路径确认架构支持 - 寻找或构建适配镜像 - 解决权限与依赖问题 - 配置与验证 - 规划生产级运维。这套方法论对于在龙芯、申威等国产 CPU 上部署 Redis、MySQL、Nginx 乃至更复杂的微服务套件都具有极高的参考价值。技术自主化的道路充满挑战但每一步扎实的实践都是在为整个生态添砖加瓦。建议你将此配置过程文档化并分享给团队成为你们国产化技术栈中的一块坚实基石。