0

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

Qnap通过其Container Station软件在IntelArm设备上支持 Docker ,我购买了一个 TS131P 来测试它,但它失败了。显然我必须构建图像的 Arm 版本,但我该怎么做呢?exec format error

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

更新

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

  • 创建了一个新的 BitBucket 代表
  • 通过 Docker 文件复制
  • 将 Docker 文件的第一行更改为FROM arm32v6/openjdk:8-jre-alpine
  • 在链接到此 repo 的 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 上?

4

1 回答 1

1

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

  • 确保 ContainerStation 在 nas 服务器上运行
  • ssh nas 服务器(来自 PC)
  • docker build构建文件docker login
  • --输入用户名用户
  • --输入密码密码
  • docker images(获取构建图像的 imageId)
  • docker tag imageId repoName/imageName :latest
  • 码头工人推

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

目前我有两个独立的图像,一个用于 Intel,一个用于 Arm。我知道有一种方法可以将多个图像组合成一个超级图像,但我还没有尝试过。 回购名称/图像名称:最新

于 2018-12-10T09:51:16.397 回答