如何为基于 Qnap Arm 的服务器构建 Arm 版本的 Docker 文件

问题描述 投票:0回答:2

我的应用程序有一个 Docker 文件,我使用 Docker Hub 来构建它。 这在基于 Intel 的Synology DS218+ Disk Station 上运行良好。

Qnap 通过其 Container Station 软件在 IntelArm 设备上支持 Docker,我购买了 TS131P 来测试此功能,但失败并显示

exec format error
。显然我必须构建该映像的 Arm 版本,但我该怎么做?

我可以以某种方式在 Qnap 本身上构建镜像吗?

更新

所以我的基础镜像是

openjdk:8-jre-alpine
,所以我在 DockerHub 上找到了与此等效的arm32,https://hub.docker.com/r/arm32v6/openjdk/所以现在:

  • 创建了新的 BitBucket 代表
  • 复制 Docker 文件
  • 将 Docker 文件的第一行更改为
    FROM arm32v6/openjdk:8-jre-alpine
  • 在链接到此存储库的 Docker 上创建了一个新的 自动化构建
但是构建现在在第二行失败了

RUN apk --no-cache add \ curl \ tini

[91mstandard_init_linux.go:190: exec user process caused "exec format error"

由于我使用的是arm镜像,我认为应该为arm编译apk,或者我是否需要告诉Docker Hub在Arm而不是Intel上构建?

docker arm qnap
2个回答
1
投票
简单的答案是你必须在arm服务器上构建arm镜像,所以我在Arm nas本身上构建了,因为这支持Docker,这就是我所做的

    确保 ContainerStation 在 nas 服务器上运行
  • ssh nas 服务器(来自 PC)
  • docker 构建
  • buildfile docker 登录
  • --输入用户名
  • 用户名
  • --输入密码
  • 密码
  • docker images(获取构建镜像的imageId)
  • docker 标签
  • imageId repoName/imageName:最新
  • docker 推送
这足以使arm32版本可以安装在arm32机器上。

目前我有两个单独的映像,一个用于 Intel,一个用于 Arm。我知道有一种方法可以将多个图像组合成一个超级图像,但我还没有尝试过。

repoName/imageName:最新


-3
投票
要为 QNAP 基于 ARM 的服务器构建 ARM 版本的 Docker 文件,您需要确保 Docker 基础映像和任何依赖项与 ARM 架构兼容。首先使用多平台 Docker 构建,它允许您指定 ARM 架构。您还需要在基于 ARM 的环境中测试 Docker 映像,以确保一切顺利运行。有关使用

基于 Arm 的服务器的更详细指南,您可以参考此综合资源。

© www.soinside.com 2019 - 2024. All rights reserved.