openEuler arm64 离线安装 Docker 与 docker-compose 实战指南
简介本资源面向在 arm64 架构服务器上部署容器环境的运维与开发人员提供一套完整的 Docker 与 Docker Compose 离线安装方案已在 openEuler 操作系统下完成验证可有效解决内网或无外网环境下无法在线拉取安装包的痛点。压缩包共包含 4 个文件以 tgz 安装包、service 服务单元文件、sh 一键安装脚本及 docker-compose 二进制文件为主整体约 54.41MB覆盖从 Docker 主程序安装到 Compose 配置的完整链路。目前已有 645 人学习下载适合需要快速搭建容器运行环境的中初级运维人员参考。借助其中的一键安装脚本读者可省去手动编译与依赖排查的繁琐过程直接完成 Docker 18.09.9 的部署并同步配置好 docker-compose 命令便于后续编排多容器应用service 文件也有助于理解系统服务注册方式为离线环境下的容器化落地提供可复用的实践参考。1. arm64 离线装 Docker为什么 openEuler 上不能直接 yum如果你手上是一台 openEuler 的 arm64 服务器还偏偏没有外网那yum install docker这条最顺手的路基本是走不通的。openEuler 官方源里 docker 相关包要么版本偏旧要么依赖链在 arm64 上缺件docker-ce的官方仓库又需要联网拉元数据。我见过太多人卡在这一步机器是鲲鹏或者飞腾的 arm64系统是 openEuler 20.03/22.03任务要求把容器跑起来结果dnf转了半天报一堆No match for argument。这份资源就是冲着这个场景来的一套 arm64 架构下的 docker 与 docker-compose 离线安装包配一个一键安装脚本作者已经在 openEuler 上跑通验证。它解决的不是「docker 是什么」而是「在没有外网、没有 x86 二进制可用的 arm64 机器上怎么把 docker engine 和 compose 插件一次性落地」。适合两类人一是信创环境里做交付的运维二是手里有 arm64 开发板或服务器、想复现容器环境的工程师。下面我按「包长什么样 → 怎么装 → 参数怎么调 → 坑在哪」的顺序拆一遍你照着走能少熬两个通宵。2. 拆开安装包arm64 二进制、依赖与脚本各管什么2.1 离线包为什么必须区分架构docker 的静态二进制是编译产物x86_64 的dockerd拿到 arm64 上连执行都执行不了内核会直接抛Exec format error。这不是配置问题是 CPU 指令集不兼容。所以任何号称「通用」的 docker 离线包只要里面塞的是 amd64 的二进制在 openEuler arm64 上就是废的。这份资源明确标了 arm64意味着里面的dockerd、docker、containerd、runc、docker-proxy这些可执行文件都是 aarch64 版本file命令一看便知。常见做法是把 docker 官方提供的aarch64静态包解压再把 compose 的二进制单独放进去。docker-compose 从 v2 开始是 Go 写的单文件插件架构同样要对上docker-compose-linux-aarch64才是你要的那个。判断方法很简单装之前先跑一句file ./docker/dockerd # 期望输出包含ELF 64-bit LSB executable, ARM aarch64如果输出里是x86-64别犹豫换包。这一步花十秒能省掉后面半小时的玄学报错。2.2 目录结构与文件职责一个能用的离线包目录通常长这样不同打包者命名略有差异但职责一致路径作用关键点bin/dockerd、docker、containerd、runc 等必须是 aarch64 二进制compose/docker-compose 插件二进制对应 aarch64放对插件目录systemd/docker.service、docker.socket路径和二进制位置要匹配install.sh一键安装脚本负责拷贝、赋权、注册服务daemon.json可选守护进程配置镜像加速、data-root 等bin/里的东西最终会被拷到/usr/bin/或/usr/local/bin/systemd/里的 unit 文件进/usr/lib/systemd/system/。脚本干的就是这些搬运和注册的活。你要清楚每个文件去哪出问题时才知道回哪找。2.3 一键脚本到底做了哪几件事别把一键脚本当黑匣子它无非是顺序执行下面这些动作。看懂了你就能自己改#!/bin/bash set -e # 1. 拷贝二进制到系统路径 install -m 0755 bin/* /usr/bin/ # 2. 安装 compose 插件v2 走 cli-plugins 目录 mkdir -p /usr/libexec/docker/cli-plugins install -m 0755 compose/docker-compose /usr/libexec/docker/cli-plugins/ # 3. 注册 systemd 服务 cp systemd/docker.service /usr/lib/systemd/system/ cp systemd/docker.socket /usr/lib/systemd/system/ # 4. 可选写入 daemon.json [ -f daemon.json ] cp daemon.json /etc/docker/daemon.json # 5. 重载并启动 systemctl daemon-reload systemctl enable --now docker逻辑说明set -e保证任何一步失败就停不会带着半成品继续跑。install -m 0755比cp更稳它同时设好权限。compose 放/usr/libexec/docker/cli-plugins/是 docker v2 插件的标准位置放错了docker compose会提示找不到命令。参数上如果你想把数据目录挪到大盘就在daemon.json里加>getenforce # 输出 Enforcing 的话临时放宽容忍度 setenforce 0生产环境不建议长期关但离线交付阶段先让它跑起来后面再按需配策略。这一步不做后面容器起不来你会以为是 docker 的问题其实是安全模块在拦。3.2 执行一键安装脚本把离线包传到目标机解压后进目录tar -zxvf docker-arm64-offline.tar.gz cd docker-arm64-offline sudo ./install.sh脚本跑完验证服务状态systemctl status docker --no-pager # 期望看到 active (running) docker version # Client 和 Server 两段都要有Server 段显示 Engine 版本docker version如果只出 Client 不出 Server说明 dockerd 没起来去看journalctl -u docker -n 50的报错。常见的是二进制权限不对或者 unit 文件路径写错。参数上脚本默认把二进制放/usr/bin如果你系统里已经有旧版 docker先systemctl stop docker再装避免新旧混用。3.3 验证 compose 与跑一个 arm64 容器compose 装好后docker compose version应该能打印版本号。注意是docker compose空格不是老的docker-compose连字符v2 插件走前者。写个最小docker-compose.yml验证services: web: image: nginx:alpine ports: - 8080:80docker compose up -d docker compose ps curl -I http://localhost:8080逻辑说明nginx:alpine是多架构镜像arm64 上会拉 aarch64 的层正好验证整条链路。docker compose ps显示 running 就说明 compose 插件和 engine 配合正常。如果卡在拉镜像那是网络问题不是安装问题——离线环境需要你提前把镜像docker save成 tar 再docker load进来。这一步是很多人翻车的地方以为装完 docker 就能随便拉镜像结果离线机器根本没出口。注意离线环境下docker pull必然失败镜像要么预导入要么走内网 registry。安装包只解决 engine 和 compose不解决镜像来源。4. 避坑与排查离线装 docker 最容易栽的五个地方4.1 现象dockerd 启动报Exec format error原因二进制架构不对包里混进了 x86_64 的可执行文件或者你从别处拷了个 amd64 的 dockerd 覆盖进去。arm64 内核无法执行 x86 指令直接拒绝。解决file /usr/bin/dockerd确认是ARM aarch64。不是就换回正确的 arm64 二进制重新systemctl daemon-reload systemctl restart docker。别想着用 qemu 模拟去跑 x86 的 dockerd那是给容器内模拟用的宿主守护进程这么干性能崩且不稳。4.2 现象docker compose提示not a docker command原因compose 插件没放对目录或者文件名不对。docker v2 只认/usr/libexec/docker/cli-plugins/docker-compose或~/.docker/cli-plugins/docker-compose你放成docker-compose-linux-aarch64它不认。解决改名并放到标准插件目录赋可执行权限install -m 0755 docker-compose-linux-aarch64 /usr/libexec/docker/cli-plugins/docker-compose docker compose version4.3 现象compose 报error while loading shared libraries: libz.so.1原因你用的不是静态编译的 compose 二进制而是依赖系统动态库的版本而 openEuler 最小化安装里缺zlib。这个报错在 arm64 上尤其常见因为很多第三方打包的 compose 没做静态链接。解决换官方静态编译的 aarch64 版本或者补依赖dnf install zlib。但离线机器装不了包所以正解是换二进制。判断方法ldd docker-compose如果列出libz.so.1 not found就是动态链接版别用。4.4 现象容器网络不通curl外部地址超时原因docker 默认创建docker0网桥并改 iptables但离线机器上 firewalld 或已有 iptables 规则可能把转发链挡了。openEuler 默认开 firewalldFORWARD链策略可能是 DROP。解决确认内核转发开启sysctl net.ipv4.ip_forward为 1再检查 firewalld 是否放行 docker 网段。临时验证可以systemctl stop firewalld但生产要按需加规则别一关了之。4.5 现象重启机器后 docker 没自启原因脚本只systemctl start没enable或者 unit 文件没被 systemd 识别。离线包里的 service 文件如果路径和实际二进制位置不一致enable 也会失败。解决systemctl enable docker并确认systemctl is-enabled docker输出enabled。再看systemctl status docker有没有Loaded: ...; enabled。这一步在交付环境里必须验否则客户一重启机器容器全没了锅是你的。5. 进阶把离线包改造成可复用的内网交付模板装通一次不算本事能把这套东西变成团队里谁都能用的模板才算。我一般会在原始离线包基础上做三件事让它从「一次性脚本」升级成「可复用交付件」。第一件把daemon.json参数化。不同机器的数据盘挂载点不一样>DATA_ROOT${DOCKER_DATA_ROOT:-/var/lib/docker} mkdir -p $(dirname $DATA_ROOT) cat /etc/docker/daemon.json EOF { data-root: $DATA_ROOT, log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } } EOF逻辑说明DOCKER_DATA_ROOT不传就用默认路径传了就落到指定盘。日志限制这两行很关键离线环境磁盘往往不大不限制日志大小跑几个月容器日志能把盘写满到时候 dockerd 直接罢工。参数上max-size和max-file按你磁盘容量调100m×3 是保守值。第二件把镜像预导入做成脚本的一部分。离线交付真正麻烦的是镜像不是 engine。我会让脚本支持扫描一个images/目录自动docker loadif [ -d images ]; then for img in images/*.tar; do [ -f $img ] docker load -i $img done fi这样交付包 engine 二进制 compose 预存镜像 tar一台机器从裸系统到容器跑起来全程无外网。第三件加一个自检脚本装完自动跑docker run --rm hello-world镜像预导入的前提下把结果写进日志交付时直接看日志判断成败不用人工敲命令。验证方法上我习惯用docker info看几个关键字段Server Version、Storage DriveropenEuler 上常见 overlay2、Cgroup Version、Architecture: aarch64。这四个对了基本就稳了。再补一个docker compose config校验 compose 文件语法避免交付现场才发现 yaml 写错。从那以后我每次做离线交付都强制走一遍「架构确认 → 脚本安装 → 服务自启 → 镜像导入 → 容器验证」这五步少一步都不签字。这套流程帮我挡掉过好几次「装完看着正常、重启就崩」的返工。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

PL/0运算符扩充实战:从词法分析到解释器的完整编译链路

PL/0运算符扩充实战:从词法分析到解释器的完整编译链路

简介:编译原理课程设计常以PL/0为基座进行功能扩充,这套资源正对应这一经典任务。资源面向本科生及开发者,围绕运算符和语句扩展展开,完整呈现了赋值运算“”与“-”、Pascal风格FOR语句(含TO与DOWNTO两种步长方向&…

2026/10/12 16:51:55 阅读更多 →
Spring Boot 2.6.13 + MySQL8 + Flowable 6.8.1 审批流搭建实战指南

Spring Boot 2.6.13 + MySQL8 + Flowable 6.8.1 审批流搭建实战指南

简介:一套Spring Boot 2.6.13、MySQL 8与Flowable 6.8.1整合的工作流应用工程,面向需要快速落地流程审批、任务管理等场景的Java后端开发者,重点解决流程引擎集成、关系型数据持久化与数据库环境搭建三方面痛点,适合作为企业级应用…

2026/10/12 16:50:52 阅读更多 →
Ubuntu Linux 手动分区避坑指南:主分区、逻辑分区与 swap 分配

Ubuntu Linux 手动分区避坑指南:主分区、逻辑分区与 swap 分配

简介:对于需要在Ubuntu系统安装过程中合理规划硬盘分区的初学者与运维人员,这份PDF文档系统梳理了最合理的分区策略。内容涵盖IDE、SCSI、SATA硬盘在Linux中的命名规则,并给出“三个主分区加一个扩展分区”的经典方案,既能有效利用…

2026/10/12 16:50:52 阅读更多 →

最新新闻

C语言递归的工程本质:栈空间、契约与四大经典场景

C语言递归的工程本质:栈空间、契约与四大经典场景

1. 为什么“递归”是C语言学习者绕不开的“成年礼”刚带完一届某高校嵌入式方向的实训项目,有位A同学在调试一个树形结构遍历模块时卡了整整三天。他反复检查指针是否越界、内存是否泄漏、函数调用栈是否溢出,最后发现——问题根本不在硬件或内存&#x…

2026/10/12 19:17:57 阅读更多 →
快照数据分析:从系统黑匣子到根因定位的工程实践

快照数据分析:从系统黑匣子到根因定位的工程实践

1. 快照数据分析不是“截图存档”,而是系统性数据资产运营的起点很多人第一次听到“快照数据分析”这个词,下意识会联想到手机截屏、网页保存、或者数据库里的简单备份。我刚接触这个概念时也这么想——直到在某跨平台系统运维项目里连续三天被同一个告警…

2026/10/12 19:17:57 阅读更多 →
韩语词库korean_wordlist:字段设计、清洗去重与Python操作实战

韩语词库korean_wordlist:字段设计、清洗去重与Python操作实战

简介:这份韩语词汇表资源包面向韩语学习者、词典研究与自然语言处理开发者,提供可直接用的韩语词条原始数据与结构化词典。压缩包内共五份文件,含两个JSON词典文件、两个TXT单词列表和一份Markdown说明文档,整体体积约28.37MB。wo…

2026/10/12 19:17:57 阅读更多 →
Matlab CNN分类模型实战:多维特征输入与二分类/多分类模板

Matlab CNN分类模型实战:多维特征输入与二分类/多分类模板

直接上干货!这次咱们用Matlab整点实用的CNN分类模型,支持多维特征输入,二分类和多分类都能玩。先看效果再说原理,代码直接扒下来就能用,替换数据分分钟搞定——这话听着就带劲,因为用Matlab写CNN的教程是真…

2026/10/12 19:17:57 阅读更多 →
Scikit-learn Pipeline:从散乱步骤到可维护的机器学习流水线

Scikit-learn Pipeline:从散乱步骤到可维护的机器学习流水线

我做了很多年的机器学习项目,有一个体会越来越深:模型训练本身往往不是最难的部分,真正让人头疼的是怎么把整个流程管起来。数据清洗、特征工程、归一化、降维、模型训练,每个环节单独跑都很简单,但连在一起之后&#…

2026/10/12 19:17:57 阅读更多 →
Cherry Studio接入DeepSeek完整指南:从API密钥到RAG知识库配置

Cherry Studio接入DeepSeek完整指南:从API密钥到RAG知识库配置

简介:面向人工智能工具使用者的实践指南,聚焦Cherry Studio桌面客户端与DeepSeek大模型的集成应用。资源围绕安装部署、API密钥配置、对话与知识库/RAG功能实操展开,并给出常见连接与使用问题的排错方法,适合希望低成本调用高性能…

2026/10/12 19:16:56 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →