目标 ARM64 麒麟电脑无法直接拉取 Redis 镜像,需在 Windows x86 电脑上通过 多架构构建工具(如 Docker Buildx) 生成适配 ARM64 的 Redis 镜像,再打包传输到目标设备。

一、核心问题:跨架构镜像兼容性

直接保存的 redis:latest 是 x86 镜像,无法在 ARM64 设备上运行。
目标机器无法拉取镜像,需在 Windows 上生成 ARM64 镜像后手动传输。

二、解决方案:使用 Docker Buildx 构建多架构镜像

步骤 1:启用 Docker Buildx

确保 Docker Desktop 已启用 Buildx(默认已支持):

docker buildx version

如果未启用,在 Docker Desktop 设置中勾选 “Enable Docker BuildKit”。

步骤2:创建 Buildx 构建器(支持多架构)

1、列出所有构建器实例
docker buildx ls

在这里插入图片描述
输出表明当前系统中有 3 个可用的构建器实例(multiarch、default、desktop-linux),且它们均支持 多架构(ARM64、ARMv7、PPC64le 等)。
STATUS 为 running 表示实例可用。
PLATFORMS 需包含 linux/arm64,否则无法构建 ARM64 镜像。

(1) 检查当前使用的构建器

docker buildx inspect --bootstrap | findstr "Name"

如果输出显示的是 default,而 default 不支持 ARM64,则需要切换到其他实例(如 multiarch-builder)。

(2)如果已有支持 ARM64 的构建器
直接切换到该实例:

docker buildx use multiarch-builder

验证是否切换成功:

docker buildx inspect --bootstrap | findstr "Platforms"

确保输出包含 linux/arm64。

(3)如果现有构建器不支持 ARM64
删除并根据下面的第2步重新初始化创建

# 删除旧实例(如 multiarch-builder)
docker buildx rm multiarch-builder
2、如果没有支持我想要的麒麟Linux的ARM64架构

①初始化 Buildx:

docker buildx create --name multiarch --use
docker buildx inspect --bootstrap

此命令创建并启用一个支持多架构的构建器实例。
②验证 Buildx 是否就绪:

docker buildx ls

确认输出中包含 multiarch 构建器,且状态为 ready。

注意
(1)multiarch 构建器如果已经支持 ARM64(linux/arm64),构建完Redis的配置后,后续构建 MySQL的 ARM64的版本镜像时,可以跳过这步创建构建器了。
(2)multiarch 构建器 是全局的 Docker 资源,切换目录不会影响其可用性。无论你在哪个目录执行 docker buildx 命令,只要构建器名称(如 multiarch)和配置正确,就可以正常使用。

步骤 3:构建 ARM64 版本的 Redis 镜像

由于 Redis 官方镜像已支持多架构,我们可以直接用 buildx 拉取并重新打包(命令中指定的 -f Dockerfile 要求必须存在该文件):

docker buildx build --platform linux/arm64 -t redis:arm64-custom --load -f Dockerfile .

注意:Dockerfile 是一个文本文件,包含一系列指令(如 FROM、RUN、COPY 等),用于自动化构建镜像。没有 Dockerfile,Docker 无法知道如何构建镜像,更无法指定目标架构(如 ARM64)。

在执行 docker buildx build 时,因为打开的cmd默认当前目录是(C:\Users\admin),一开始此目录下是没有 Dockerfile 文件的,如果只是想基于官方 redis:latest 镜像构建 ARM64 版本,可以通过以下两个方法在 C:\Users\admin 下创建一个简单的 Dockerfile:
(1)创建 Dockerfile:

echo FROM --platform=linux/arm64 redis:latest > Dockerfile

或者用文本编辑器(如 Notepad)新建 Dockerfile,内容为:

# Dockerfile
FROM --platform=linux/arm64 redis:latest

或最简单就是:
①右键空白处 → 新建 → 文本文档。
②将文件名改为 Dockerfile(注意:删除 .txt 后缀,确保文件类型为 Dockerfile 而非 Dockerfile.txt)。
③如果系统隐藏了扩展名,需先启用显示扩展名:在文件资源管理器中点击 查看 → 勾选 文件扩展名。
用记事本打开 Dockerfile,粘贴以下内容:

FROM --platform=linux/arm64 redis:latest

(2)重新运行构建命令:

docker buildx build --platform linux/arm64 -t redis:arm64-custom --load .

在这里插入图片描述
其实最好是先新建一个文件夹比如redisDockerfile,然后在该目录下创建 Dockerfile,构建 ARM64 版本的redis镜像,再通过步骤4打包tar文件。(因为还需要创建MySQL等镜像然后打包,Dockerfile里需要的内容不一样不能复用)

步骤 4:打包镜像并传输

检查本地镜像列表

docker images

输出示例:

REPOSITORY   TAG            IMAGE ID       CREATED        SIZE
redis        arm64-custom   62b6b206d951   10 minutes ago 105MB

如果镜像名称是 redis:arm64-custom,则应执行:

docker save -o redis-arm64.tar redis:arm64-custom

传输文件到 ARM64 设备:
使用 U 盘、SCP 或网络共享将 redis-arm64.tar 复制到目标机器。

步骤5:在 ARM64 设备上加载并运行Redis

打开终端,cd到tar文件所在目录;
1、加载镜像:

sudo docker load -i redis-arm64.tar

2、运行 Redis 容器:

sudo docker run -d -p 6379:6379 --name my-redis redis:arm64-custom

3、验证运行状态:

sudo docker exec -it my-redis redis-cli

输入PING结果PONG,容器 my-redis 正在运行与容器内的 Redis 服务正常响应;

三、最终: 测试redis连接

在目标电脑运行redis后,在另外一台电脑通过docker测试能不能连接redis;
麒麟Linux使用hostname -I查看目标电脑IP;

docker run -it --rm redis redis-cli -h 199.169.39.77 -p 6379

在这里插入图片描述
如果连接成功,会进入 Redis CLI,输入 PING 应返回 PONG。
如果失败,会报错:

Could not connect to Redis at 199.169.39.77:6379: Connection refused

四、 拓展:

上面构建Redis已经创建过 ARM64 版本构建器,所以复用直接从步骤3开始构建ARM64 版本的 Mysql 、Java8镜像。

一、构建 ARM64 版本的 Mysql 镜像

步骤一、构建ARM64 版本的 Mysql 镜像

在这里插入图片描述
①右键空白处 → 新建 → 目录 mysql-arm64-build→文本文档。
②将文件名改为 Dockerfile(注意:删除 .txt 后缀,确保文件类型为 Dockerfile 而非 Dockerfile.txt)。
③如果系统隐藏了扩展名,需先启用显示扩展名:在文件资源管理器中点击 查看 → 勾选 文件扩展名。
用记事本打开 Dockerfile,粘贴以下内容:

docker buildx build --builder multiarch --platform linux/arm64 -t mysql-arm64:latest --load .

在这里插入图片描述
出现importing to docker 说明成功构建ARM64 版本的 Mysql 镜像。

步骤二、打包ARM64 版本的 Mysql 镜像
docker save -o mysql-arm64.tar mysql-arm64:latest

在这里插入图片描述

步骤三、在 ARM64 设备上加载并运行Mysql

打开终端,cd到tar文件所在目录;
(1)在目标 ARM64 设备上加载 mysql-arm64.tar :

sudo docker load -i mysql-arm64.tar

(2)运行 MySQL 容器

sudo docker run -d --name mysql-arm64 -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 mysql-arm64:latest

在这里插入图片描述
如果3306端口被占用(默认密码123456):

sudo docker run -d --name mysql-arm64 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql-arm64:latest

(3)验证运行状态

docker ps | grep mysql-arm64
docker logs mysql-arm64
步骤四、 测试连接
mysql -h 199.169.39.77 -P 3306 -u root -p

输入密码 yourpassword,成功连接后应看到 MySQL 提示符:

mysql>

在这里插入图片描述

如果是3307:

mysql -h 199.169.39.77 -P 3307 -u root -p

二、构建 ARM64 版本的 Java8 镜像

参考上面的MySQL

步骤一、构建ARM64 版本的 Java8 镜像
cd D:\java8-arm64-build
docker buildx build --platform linux/arm64 -t java8-arm64:latest --load .
步骤二、打包ARM64 版本的 Java8 镜像
docker save -o java8-arm64.tar java8-arm64:latest
步骤三、在 ARM64 设备上加载并运行Java8

打开终端,cd到tar文件所在目录;
(1)在目标 ARM64 设备上加载 java8-arm64.tar :

sudo docker load -i java8-arm64.tar

(2)运行 Java8 容器
test-0.0.1-SNAPSHOT.jar位于目录/data下,且application.yml(里面redis密码默认无)也在该目录下

sudo docker run -it --name java8 -v /data/test-0.0.1-SNAPSHOT.jar:/app/app.jar java8-arm64:latest java -jar /app/app.jar

查看日志:

sudo docker logs java8

补充:
①挂载整个目录(推荐)

sudo docker run -it -v /data:/data java8-arm64:latest java -jar /data/test-0.0.1-SNAPSHOT.jar

挂载方式:
将主机 /data 目录完整挂载到容器的 /data 目录。
容器内可以直接访问 /data 下的所有文件(如 JAR 包、配置文件 application.yml、日志文件等)。
优点:
灵活性高:如果 JAR 需要读取同目录下的配置文件(如 application.yml),无需额外挂载。
调试方便:容器内可以直接访问 /data 下的所有文件(如查看日志、修改配置)。
避免路径问题:无需担心容器内目标目录(如 /app)是否存在。
适用场景:
需要读取多个关联文件(JAR + 配置文件 + 资源文件)。
开发/测试时快速调试(可直接修改主机 /data 下的文件并重启容器)。
注意事项:
确保容器内的工作目录或命令路径与挂载路径一致(如 java -jar /data/xxx.jar)。
如果镜像有默认用户(如非 root),需确保该用户对挂载目录有权限。
②挂载单个 JAR 文件

sudo docker run -it -v /data/test-0.0.1-SNAPSHOT.jar:/app/app.jar java8-arm64:latest java -jar /app/app.jar

挂载方式:
仅将主机的 /data/test-0.0.1-SNAPSHOT.jar 文件挂载到容器的 /app/app.jar。
其他文件(如配置文件)不会被挂载,可能导致 JAR 启动失败(如果依赖外部配置)。
优点:
轻量:只挂载必要的文件,适合简单场景。
隔离性:容器内 /app 目录的其他文件不会被主机干扰。
缺点:
依赖文件缺失:如果 JAR 需要读取 application.yml 或资源文件,必须额外挂载(否则会报错)。
路径依赖:容器内必须存在 /app 目录(否则挂载失败),且需确保命令中的路径(/app/app.jar)匹配。
适用场景:
仅需运行单个 JAR 文件,且无外部配置依赖。
需要严格隔离主机和容器的文件系统。
改进建议:
如果必须挂载单个文件,建议同时挂载配置文件:

sudo docker run -it \-v /data/test-0.0.1-SNAPSHOT.jar:/app/app.jar \-v /data/application.yml:/app/application.yml \java8-arm64:latest \java -jar /app/app.jar

在这里插入图片描述

步骤四、 测试

在终端里能不能成功运行后端

三、构建 ARM64 版本的 Nginx 镜像

参考上面的MySQL

步骤一、构建ARM64 版本的 Nginx 镜像
cd D:\nginx-arm64-build
docker buildx build --platform linux/arm64 -t nginx-arm64:latest -f Dockerfile . --load
步骤二、打包ARM64 版本的 Nginx 镜像
docker save nginx-arm64:latest -o nginx-arm64.tar
步骤三、在 ARM64 设备上加载并运行Nginx

打开终端,cd到tar文件所在目录;
(1)在目标 ARM64 设备上加载 nginx-arm64.tar :

sudo docker load -i nginx-arm64.tar

(2)运行 Nginx 容器

sudo docker run -d -p 80:80 --name nginx-test nginx-arm64:latest

补充:82是nginx监听即容器端口,宿主机端口机浏览器外部访问端口8085

sudo docker run -d --name nginx -p 8085:82 -v "/data/dist:/usr/share/nginx/html/dist" -v "/data/nginx.conf:/etc/nginx/conf.d/default.conf" nginx-arm64:latest

在这里插入图片描述
80/tcp是容器nginx默认监听80端口,但未被映射到宿主机即外部无法直接通过宿主机的 80 端口访问

步骤四、 测试连接

1、使用浏览器访问
打开浏览器,访问 http://199.169.39.77(替换为 ARM64 设备的实际 IP)。
预期结果:
显示 Nginx 默认欢迎页或自定义的 index.html。
2、 使用 Test-NetConnection 测试 TCP 端口

Test-NetConnection 199.169.39.77 -Port 80

成功输出:

ComputerName     : 199.169.39.77
RemoteAddress    : 199.169.39.77
RemotePort       : 80
TcpTestSucceeded : True

五、查询所有容器状态:

(1)检查现有的所有容器,

sudo docker ps -a

应该有RedisMysql,而且STATUS里显示的时up正在运行
(2)停止xxxid容器运行(如果是up状态)

sudo docker stop xxxid

移除xxxid容器

sudo docker rm xxxid

(3)端口已经in use

sudo lsof -i :3306

显示端口进程
(如果3306原本有mysql在运行,改sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql-arm64:latest)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87768.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87768.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87768.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代理IP的安全陷阱:如何避免中间人攻击与IP池污染?

在跨境业务、数据采集等场景中,代理IP已成为刚需工具。然而,其隐藏的安全风险却常被忽视——轻则泄露隐私,重则导致账号封禁、数据劫持甚至金融损失。本文将深入剖析两大核心风险(中间人攻击与IP池污染),并…

深入理解大语言模型中的超参数:Temperature、Top-p 与更多

随着大语言模型(LLM)如 GPT、Claude、Gemini 的广泛应用,调优生成文本的质量与风格成为开发者和研究人员的重要课题。其中,超参数(Hyperparameters)如 temperature 和 top_p 扮演了核心角色,影响…

译码器Multisim电路仿真汇总——硬件工程师笔记

目录 74LS实现二线三线译码器 1 74LS139D和74LS138D基础知识 1.1 74LS139D 二线四线译码器 1.1.1 功能特点 1.1.2 引脚功能 1.1.3 工作原理 1.1.4 应用场景 1.1.5 使用方法 1.1.6 注意事项 1.6.7 逻辑真值表 1.2 74LS138D 3线8线译码器 1.2.1 功能特点 1.2.2 引脚…

国产 OFD 标准公文软件数科 OFD 阅读器:OFD/PDF 双格式支持,公务办公必备

各位办公软件小达人们,今天咱来聊聊数科OFD阅读器! 软件下载地址安装包 这软件啊,是基于咱国家自主OFD标准的版式阅读软件,主要用来阅读和处理OFD/PDF电子文件,还能用于公务应用扩展。它支持打开和浏览OFD/PDF格式的文…

vue中的toRef

在 Vue 中, toRef 函数用于将响应式对象的属性转换为一个独立的 ref 对象,同时保持与原始属性的关联。其参数格式及用法如下: toRef 的参数说明 1. 参数 1:源对象(必须) - 类型: Object &…

暖通锅炉的智能管控:物联网实现节能又舒适​

暖通锅炉系统在建筑供暖、工业供热等领域扮演着重要角色,其运行效率和能源消耗直接关系到用户的使用体验和成本支出。传统的暖通锅炉管理方式往往依赖人工操作和经验判断,存在能耗高、调节不灵活、舒适性差等问题。随着物联网技术的发展,暖通…

PHP:从入门到进阶的全面指南

PHP(Hypertext Preprocessor)作为一种广泛使用的开源脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中。自诞生以来,PHP 凭借其简单易学、功能强大以及丰富的生态系统,成为了众多网站和 Web 应用程序开发的首选语言之一。…

EXCEL 基础函数

1、绝对引用、相对引用 1.1相对引用 相对引用,这是最常见的引用方式。复制单元格公式时,公式随着引用单元格的位置变化而变化 例如在单元格内输入sum(B2:C2),然后下拉填充柄复制公式。 可以看到每个单元格的公式不会保持sum(B2:C2)&#…

升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN

在升级到MySQL 8.4后,许多用户在启动数据库时遇到了一种常见错误:“io_setup() failed with EAGAIN”。本文将深入探讨该错误的原因,并提供详细的解决方案。错误分析错误描述当你启动MySQL时,可能会在日志文件中看到以下错误信息&…

【ECharts Y 轴标签优化实战:从密集到稀疏的美观之路】

ECharts Y 轴标签优化实战:从密集到稀疏的美观之路 📋 文章背景 在开发数据可视化模块时,我们遇到了一个常见但棘手的图表显示问题:ECharts 图表的 Y 轴标签过于密集,影响了用户体验和数据的可读性。本文将详细记录整个…

【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Pytorch完整源码和数据)

目录 效果一览程序获取程序内容代码分享效果一览 程序获取 获取方式一:文章顶部资源处直接下载:【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Pytorch完整源码和数据) 获取方式二:订阅电池建模专栏获取电池系列更多文件。 程序内容 1.【锂电池剩余寿命预测…

Minstrel:多智能体协作生成结构化 LangGPT 提示词

一、项目概述 Minstrel 是一个基于 LangGPT 框架的多智能体系统,自动生成结构化、人格化的提示词。它通过多个协作代理,提升提示词的准确性、多样性和灵活性,适合非 AI 专家使用 (github.com)。 二、问题动机 当前 LLM 提示设计经验依赖强…

Golang发送定时邮件

前面尝试过用Python来发送邮件,下面测试一下Golang如何发送邮件 需要使用三方库如下 1.安装github.com/jordan-wright/email go get github.com/jordan-wright/email安装完成之后代码如下 package mainimport ("github.com/jordan-wright/email""log""…

CodeSys的软PLC忘记了用户名和密码怎么办

Codesys的win v3 x64软PLC忘记用户名和密码怎么办 概述检查文件成功 概述 我曾经多次在运行了软PLC后忘记了自己的用户名和密码。有些是回忆起来了,但有些真的想不起来了。没有办法后来是重新装的CodeSys。这次从网上看到大佬写的文章,试了一下&#xf…

【论文】微服务架构下分布式事务一致性解决方案设计与实践

摘要 2022年3月至2023年6月,我作为首席架构师主导完成了某大型电商平台订单系统的微服务化改造项目。该项目日均处理订单量达300万笔,旨在解决原有单体架构在业务高峰期出现的性能瓶颈和事务一致性问题。本文重点论述在微服务架构下,如何通过Saga事务模式、事件溯源和最终一…

Matplotlib 安装部署与版本兼容问题解决方案(pyCharm)

引言 Matplotlib 是 Python 中最常用的可视化库之一,它是一个综合性的绘图库,能够创建静态的、动画的和可交互的可视化图形图像,能够创建折线图、散点图,还是复杂的热力图、3D 绘图等 matplotlib官网地址:https://ma…

《设计模式之禅》笔记摘录 - 4.抽象工厂模式

抽象工厂模式的定义 抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式,其定义如下: Provide an interface for creating families of related or dependent objects without specifying ir concrete classes.(为创建一组相关或…

python-注释

文章目录 单行注释多行注释使用多个 # 符号使用三引号( 或 """) 特殊注释Shebang(Unix/Linux 脚本声明)编码声明(Python 2 需要)文档字符串(Docstring) 在 Python 中…

YOLO11推理模式:极速高效的目标检测新选择

一、引言 在机器学习和计算机视觉领域,模型的推理(Inference)是应用阶段的核心。Ultralytics 最新发布的 YOLO11 模型,凭借其强大的predict模式,在保证准确率的同时,极大提升了推理速度和多样数据源兼容能…

如何创建基于 TypeScript 的 React 项目

React 是一个用于构建用户界面的强大 JavaScript 库。结合 TypeScript,您可以获得类型安全和更好的开发体验。本文将详细介绍如何从头开始创建一个基于 TypeScript 的 React 项目。 1. 为什么选择 TypeScript? 在深入创建项目之前,我们先了解…