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

这篇具有很好参考价值的文章主要介绍了解决 “Function not implemented“, 为 arm64 架构宿主机重新构建 Nacos 镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

官方的 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”文章来源地址https://www.toymoban.com/news/detail-481584.html

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_DIR

RUN 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 all




ADD 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.sh

EXPOSE 8848
ENTRYPOINT ["bin/docker-startup.sh"]

到了这里,关于解决 “Function not implemented“, 为 arm64 架构宿主机重新构建 Nacos 镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 宿主机无法ping通docker容器IP解决

    安装docker后,发现启动容器的端口8082 映射到宿主机的端口80访问主机没有反应,此时进入容器查看日志,发现并没有请求打进来 现象: 正在连接 localhost (localhost)|::1|:80… 已连接。 已发出 HTTP 请求,正在等待回应… 读取文件头错误 (Connection reset by peer)。 重试中。 1:怀疑容

    2024年02月06日
    浏览(46)
  • error: (-2:Unspecified error) The function is not implemented.

    一.环境配置 windows10+pycharm+python3.9 二、问题描述 三、解决方法 1.pip安装opencv-contrib-python,注意opencv-contrib-python版本和opencv版本要一致 分别运行以下命令: 卸载opencv-python-headless: 更新opencv版本: 四.解决啦

    2024年02月08日
    浏览(36)
  • docker中容器时间和宿主机时间不同步问题解决

    1、容器挂在启动,挂载localtime文件到容器内,共享主机的locactime 2、复制主机的localtime 3、重启容器 4、查看容器时间,检查容器时间是否正常

    2024年02月06日
    浏览(57)
  • 宿主机无法连接docker里的redis问题解决(生产环境慎用)

    1.连接超时 2.连接能连上但马上断开并报错 3.提示保护模式什么的 链接redis 时只能通过本地localhost (127.0.0.1)这个来链接,而不能用网络ip(192.168…)这个链接 1.打开配置文件把下面对应的注释掉 2.Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进

    2024年04月13日
    浏览(59)
  • 解决防火墙导致虚拟机不能ping通宿主机的问题

    今天,无缘无故的,虚拟机突然用不了,网络连上不了,一番折腾翻找,最后才发现,是因为虚拟机ping不同宿主主机了,连网关都ping不通了,但是,宿主主机却可以ping通虚拟机 。 最后才发现,原来是防火墙的问题,直接关掉防火墙自然是可以解决问题的,但是,这样不好

    2024年02月09日
    浏览(51)
  • Docker第一讲 Docker容器间/容器与宿主机ping不通解决

    通过容器ip访问 容器重启后,ip会发生变化。通过容器ip访问不是一个好的方案。 通过宿主机的ip:port访问 通过宿主机的ip:port访问,只能依靠监听在暴露出的端口的进程来进行有限的通信。 通过link建立连接(官方不推荐使用) 运行容器时,指定参数link,使得源容器与被链接

    2024年02月11日
    浏览(48)
  • docker macvlan虚拟化网络与宿主机通信问题解决——筑梦之路

    默认情况下各个macvlan之间可以通讯,但是不能与宿主机进行通讯!! 主要原因:为了安全而禁止互通 如宿主机ping容器的ip,尽管他们属于同一网段,但也是ping不通的,反过来也是。 这里用两个实例来说明如何解决这个问题。 实例一  实例二 参考资料: 解决Docker macvlan网络

    2024年02月07日
    浏览(52)
  • 虚拟机中docker安装rabbitmq 宿主机不能访问rabbitmq管理界面问题解决

    1, MacOS的操作系统, 通过Vmware Fusion虚拟机软件, 安装了Centos7操作系统, 里面安装了docker engine(1.13.1); 2, 试验rabbitmq, 下载了rabbit:latest镜像 3, 通过如下命令启动rabbitmq 4, 启动之后, 在宿主机浏览器测试访问虚拟机中的rabbitmq http://192.168.88.100:15672/ 试验结果: 拒绝访问 1, 检查centos-l

    2024年02月10日
    浏览(55)
  • 解决docker通过volumes挂载文件,宿主机修改后容器内不同步,重启服务才能同步

    将文件的权限改为777,即 chmod 777 filename 。 详细解释在该文章: https://huaweicloud.csdn.net/633114e5d3efff3090b51a5a.html 说明: 这是由于linux系统文件挂载机制导致的。 docker通过volumes挂载文件到容器中,有以下两种方式: 1、挂载目录 2、挂载具体文件:并不是挂载了某个文件的路径,

    2024年03月10日
    浏览(86)
  • 关于centos虚拟机设置固定ip、设置后无法上网、宿主机无法ping通的解决方案

    一.centos设置固定ip         1.虚拟机设置 编辑→虚拟网络编辑器,选择NAT模式。            2.NAT设置,设置网关(前面三个需要与你设置的静态虚拟机ip一致(我的是192.168.2.40))。  3.虚拟机设置为NAT模式  4.设置虚拟机固定ip(下图这种是gui界面设置的,网上有通过命令设

    2024年02月12日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包