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

时间:2018-10-12 06:37:42

标签: docker arm qnap

我的应用程序有一个 Docker 文件,并使用 Docker Hub 进行构建。 在基于Intel的 Synology DS218 + Disk Station 上可以正常工作。

Qnap 使用 Container Station 软件在 Intel Arm 设备上均支持Docker,我购买了TS131P对此进行了测试,但是失败,并显示exec format error。显然我必须构建该图像的Arm版本,但是我该怎么做?

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

更新

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

  • 创建了一个新的BitBucket代表
  • 通过Docker文件复制
  • 将Docker File的第一行更改为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映像,所以我假定apk应该为arm编译,还是我需要告诉Docker Hub在Arm而不是Intel上构建?

1 个答案:

答案 0 :(得分:0)

简单的答案是,您必须在arm服务器上构建一个arm映像,所以我建立在Arm nas本身上,因为它支持Docker,这就是我要做的

  • 确保ContainerStation在nas服务器上运行
  • ssh nas服务器(从PC)
  • docker build buildfile docker登录
  • -输入用户名用户名
  • -输入密码密码
  • 泊坞窗图像(获取内置图像的imageId)
  • docker标签 imageId repoName / imageName :最新
  • docker push

这足以使arm32版本可用于安装在arm32机器上。

目前,我有两张单独的图像,一张用于Intel,另一张用于Arm。我知道有一种方法可以将多个图像组合为一个超级图像,但是我还没有尝试过。     repoName / imageName :最新