解决 “Function not implemented“, 为 arm64 架构宿主机重新构建 Nacos 镜像

news/2024/4/25 0:10:40/

文章目录

  • 前言
  • 重新构建镜像的步骤
  • 附录
    • FAQ: "cannot install the best candidate for the job" & "conflicting requests"
    • Dockerfile 文件

前言

官方的 Nacos 镜像在 arm64 架构的系统上运行容器会出现 “Function not implemented” 的相关异常日志以致于容器内 Nacos 无法正常启动.
原因是官方镜像基于的 CentOS 7.x 的基础镜像版本并不支持 arm64 架构的系统.

其实 7.x 版本是有 arm64 支持的, 只是官方镜像并没有采用那个 platform (docker pull --platform=<plartform> <image-name>:<tag>)

于是下载官方 Dockerfile 尝试将基础镜像版本改为 CentOS 8.x, 但是, 由于 CentOS 已经 EOL 了, 镜像构建过程中出现各种 “Failed to download metadata for repo ‘xxx’: Cannot prepare internal mirrorlist: No URLs in mirrorlist” 的问题.
进而, 将基础镜像改为 “rockylinux:8”, 关于 rockylinux 的介绍, 可以参考: https://rockylinux.org

重新构建镜像的步骤

首先, 去到 Nacos 官方 Github 地址找到你想要的版本 (这里以 v2.1.0 为例, nacos/nacos-server:v2.1.0 的 Dockerfile (https://github.com/nacos-group/nacos-docker/tree/v2.1.0/build)), 简单阅读一下 Dockerfile, 注意几个关键点:

FROM centos:7.9.2009
...ADD bin/docker-startup.sh bin/docker-startup.sh
ADD conf/application.properties conf/application.properties...

首先将 “From centos:7.9.2009” 修改为 “FROM rockylinux:8”, 然后将 bin 目录和 conf 目录都下载到本地和 Dockerfile 同一目录. 结构如下:

$ tree ./
./
├── Dockerfile
├── bin
│   └── docker-startup.sh
└── conf└── application.properties

重新构建镜像:

docker build -t caplike/nacos-server:v2.1.0 .

先尝试启动一次容器:

docker run --name nacos -d caplike/nacos-server:v2.1.0

停止容器, cp 相关目录 (为了 bind mounts):

docker cp nacos:/home/nacos/conf .docker-mounts/nacos-server2.1.0
docker cp nacos:/home/nacos/logs .docker-mounts/nacos-server2.1.0
docker cp nacos:/home/nacos/data .docker-mounts/nacos-server2.1.0
docker cp nacos:/home/nacos/bin  .docker-mounts/nacos-server2.1.0

然后再启动:
值得一提的是, 由于 Nacos 2.x 额外暴露了两个 RPC 端口用于通信, 分别是按照偏移量 1000 和 1001 计算的, 所以端口映射改了的话, 相应的剩下两个 RPC 的端口也要加上对应的偏移量, 如:

docker run -d -p 20003:8848 -p 21003:9848 -p 21004:9849 \--name nacos-server2.1.0 \-v .docker-mounts/nacos-server2.1.0/conf:/home/nacos/conf \-v .docker-mounts/nacos-server2.1.0/data:/home/nacos/data \-v .docker-mounts/nacos-server2.1.0/logs:/home/nacos/logs \-e MODE=standalone \--restart=always \caplike/nacos-server:v2.1.0

最后, 附上我自己构建的支持 arm64 架构的 nacos-server:v2.1.0 镜像, 欢迎直接使用, HUB 地址: https://hub.docker.com/repository/docker/caplike/nacos-server/general

附录

FAQ: “cannot install the best candidate for the job” & “conflicting requests”

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel wget iputils nc vim libcurl 后追加 "–nobest --allowerasing”

Dockerfile 文件

FROM rockylinux:8
MAINTAINER like "scorpio.caplike@gmail.com"# set environment
ENV MODE="cluster" \PREFER_HOST_MODE="ip"\BASE_DIR="/home/nacos" \CLASSPATH=".:/home/nacos/conf:$CLASSPATH" \CLUSTER_CONF="/home/nacos/conf/cluster.conf" \FUNCTION_MODE="all" \JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk" \NACOS_USER="nacos" \JAVA="/usr/lib/jvm/java-1.8.0-openjdk/bin/java" \JVM_XMS="1g" \JVM_XMX="1g" \JVM_XMN="512m" \JVM_MS="128m" \JVM_MMS="320m" \NACOS_DEBUG="n" \TOMCAT_ACCESSLOG_ENABLED="false" \TIME_ZONE="Asia/Shanghai"ARG NACOS_VERSION=2.1.0
ARG HOT_FIX_FLAG=""WORKDIR $BASE_DIRRUN set -x \&& yum update -y \&& yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel wget iputils nc  vim libcurl --nobest --allowerasing
RUN wget  https://github.com/alibaba/nacos/releases/download/${NACOS_VERSION}${HOT_FIX_FLAG}/nacos-server-${NACOS_VERSION}.tar.gz -P /home
RUN tar -xzvf /home/nacos-server-${NACOS_VERSION}.tar.gz -C /home \&& rm -rf /home/nacos-server-${NACOS_VERSION}.tar.gz /home/nacos/bin/* /home/nacos/conf/*.properties /home/nacos/conf/*.example /home/nacos/conf/nacos-mysql.sql
RUN yum autoremove -y wget \&& ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone \&& yum clean allADD bin/docker-startup.sh bin/docker-startup.sh
ADD conf/application.properties conf/application.properties# set startup log dir
RUN mkdir -p logs \&& cd logs \&& touch start.out \&& ln -sf /dev/stdout start.out \&& ln -sf /dev/stderr start.out
RUN chmod +x bin/docker-startup.shEXPOSE 8848
ENTRYPOINT ["bin/docker-startup.sh"]

http://www.ppmy.cn/news/46982.html

相关文章

Linux内存管理(三十三):vmalloc 详解

源码基于&#xff1a;Linux 5.4 0. 前言 kmalloc()、vmalloc()、malloc() 这三个函数是常用的内存分配函数&#xff0c;但有着本质的区别。 kmalloc() 基于slab 分配器&#xff0c;是建立在一个物理地址连续的大内存块上&#xff0c;所以 kmalloc() 分配的内存物理是上连续的…

c++引用

目录 C 引用的概念&#xff1a; c引用在工程中的好处&#xff1a; c引用的用法 c引用的场景&#xff1a; c引用的场景1&#xff1a;作为函数参数 c引用的场景2&#xff1a;作为函数返回值 引用的优点包括&#xff1a; 在 C 中使用引用时需要注意以下几点&#xff1a; C…

【JUC】volatile和JMM

【JUC】volatile和JMM 文章目录 【JUC】volatile和JMM1. volatile1.1 特点1.2 内存语义 2. 内存屏障2.1 分类2.2 什么叫保证有序性&#xff1f;2.3 内存屏障的4种插入策略 3. volatile特性3.1 保证可见性3.2 volatile读写过程3.3 没有原子性3.4 指令禁重排(有序性) 4. 正确使用…

【rustdesk 】rfc5128 :跨NATs的P2P通信技术 和rdserver

rfc5128rustdesk 的服务器是基于rfc5128 的 RendezvousServer // https://tools.ietf.org/rfc/rfc5128.txt // https://blog.csdn.net/bytxl/article/details/44344855use flexi_logger::*; use hbb_common::{bail, config::RENDEZVOUS_PORT, ResultType}; use hbbs

【vue】Vue 开发技巧:

文章目录 1.路由参数解耦2.功能组件3.样式范围4.watch的高级使用5.watch监听多个变量6.事件参数$event7.程序化事件监听器8.监听组件生命周期 1.路由参数解耦 通常在组件中使用路由参数&#xff0c;大多数人会做以下事情。 export default {methods: {getParamsId() {return …

TensorFlow GPU不可用,WSL2安装

这个帖子写给23年刚买电脑、系统是win11&#xff0c;tensorflow版本是2.10以上的兄弟们。不符合的可以去看其他答案了。 这是以我三天来的安装经历来写的&#xff0c;希望能给后来的兄弟们减少时间的浪费。 win11&#xff0c;安装的tensorflow的版本都是2.12的&#xff0c;但…

ARM汇编第一次上机(顺序、分支、单重循环)【嵌入式系统】

ARM汇编第一次上机&#xff08;顺序、分支、单重循环&#xff09;【嵌入式系统】 前言推荐说明ARM汇编第一次上机&#xff08;顺序、分支、单重循环&#xff09;内容1 sum1流程图代码编写结果分析 2 sum2流程图代码编写结果分析 3 numbers流程图代码编写结果分析 最后 前言 20…

基于C#编程建立泛型Vector数据类型及对应处理方法

目录 一、简介 二、方法 2.1 建立Vector类 2.2 Vector成员 2.3 Vector属性 2.4 Vector方法 2.4.1 构造函数 2.4.2 Vector元素操作方法 2.4.3 Vector 运算 三、调用方法 3.1 方法 3.1.1 Append 3.1.2 this[] 3.1.3 Insert 3.1.4 DelLen 3.1.5 FindNumber 3.1.6 …

觉非科技发布:基于BEV的数据闭环融合智驾解决方案

2023年上海车展期间&#xff0c;觉非科技基于BEV的数据闭环融合智能驾驶解决方案正式发布。 该方案可通过量产车BEV的实时感知结果&#xff0c;提供完整的城市Map-lite及Map-free数据闭环融合解决方案&#xff0c;并满足城市NOA、记忆通勤/泊车以及感知大模型训练的需要。 车…

数据结构之顺序表

&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;博主大一智能制造在读&#xff0c;热爱C/C&#xff0c;会不定期更新系统、语法、算法、硬件的相关博客&#xff0c;浅浅期待下一次更新吧&#xff01; ✈️算法专栏&#xff1a;算法与数据结构 &#x1f618;博客制…

【动手学深度学习】使用块的网络(VGG)

使用块的网络&#xff08;VGG&#xff09; 本文为李沐老师《动手学深度学习》一书的学习笔记&#xff0c;原书地址为&#xff1a;Dive into Deep Learning。 另&#xff0c;给自己练习时没有gpu资源的小伙伴推荐下kaggle数据科学网站&#xff0c;每周免费训练时长30h。 1 网络结…

大数据=SQL Boy,SQL Debug打破SQL Boy 的僵局

网上经常盛传 大数据sql boy&#xff0c;后端开发crud boy&#xff0c;算法工程师调参boy 在大数据领域也工作了好几年了&#xff0c;确实大数据开发&#xff0c;很多工作就是写sql&#xff0c;hive sql、spark sql、flink sql等等sql 一、背景&#xff1a; 但是经常有这样一…

不能使用chatGPT?这3个平替甚至比chatGPT更强

不能使用chatGPT&#xff1f;这3个平替甚至比chatGPT更强 chatGPT&#xff0c;一款由OpenAI开发的新型AI聊天机器人&#xff0c;正在势如破竹地改变着许多人的工作和生活方式。作为一款基于大语言模型的聊天机器人&#xff0c;chatGPT能够理解自然语言并进行人机对话。与传统的…

【LeetCode: 300. 最长递增子序列 | 暴力递归=>记忆化搜索=>动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

E4--光纤接口通信测试应用2023-04-17

1.场景 使用两块开发板A和B&#xff0c;通过光纤接口将在A板上ROM中存储的图片数据转发到B板并显示在B板连接的显示屏上&#xff0c;实现光纤接口通信。 具体场景是&#xff0c;由于A735T片上资源有限&#xff0c;因此ROM IP存储了一张1024*600&#xff08;LVDS屏幕&#xff0…

基于html+css的盒子展示6

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

用英语翻译中文-汉字英文翻译

中文转英语翻译 作为一款高效、准确的中文转英语翻译软件&#xff0c;我们的产品可以帮助全球用户更好地沟通和合作&#xff0c;实现跨文化交流。 在全球化的今天&#xff0c;中英文翻译已经成为商务、学术、娱乐等各个领域不可或缺的一部分。我们的中文转英语翻译软件是为了…

C++初阶之缺省参数

目录 前言 缺省参数 1.缺省参数的概念 2.缺省参数的分类 全缺省参数 半缺省参数 前言 今天小编继续给大家带来C的内容&#xff0c;那么今天小编给大家讲解的就是有关C中缺省参数的介绍。 缺省参数 1.缺省参数的概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省…

实验一 表的建立、修改和删除

实验一 表的建立、修改和删除 第1关&#xff1a;创建表 任务描述 本关任务&#xff1a;要求学生创建Student&#xff0c;Course&#xff0c;SC表 相关知识 使用SQL语言中的create table语句。 SQL语句中关键字大小写不区分。 create table Student (Sno char(10) primary…

138. 复制带随机指针的链表

给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的 n…