在ARM主机上使用qemu在Alpine / Docker上安装bash

我正尝试在x86主机上构build一个Docker容器,以便在ARM主机上运行。 要做到这一点,你需要使用qemu进行交叉编译。 由于图像尺寸太小,我也想使用高山linux。

不过,我遇到了一个不寻常的错误,只发生在编译时间 – 一个安装bash的问题。

我的理解是,当运行apk -U add bash时候, apk -U add bash ,apk更新软件包的软件包列表,然后安装最新版本的软件包。 然后运行安装后的脚本。 看来这些后安装脚本失败。 然而,当我build立没有bash的图像,然后在ARM主机上交互地运行容器,并且做了apk fix && apk -U add bash时候, 然而,在构build时执行这个命令却失败了。

我如何在buildtime中添加bash?

Dockerfile

 FROM armhf/alpine:3.5 ENV CONSUL_PREFIX __CONSUL_PREFIX__ ENV CONSUL_SECRET_PREFIX __CONSUL_SECRET_PREFIX__ ENV QEMU_EXECVE 1 COPY deploy/qemu/qemu-arm-static /usr/bin/ RUN ["qemu-arm-static","/sbin/apk","fix"] RUN ["qemu-arm-static","/sbin/apk","add","-U","bash"] RUN ["qemu-arm-static","/sbin/apk","-U","add", \ "postgresql-client",\ "curl","vim",\ "tzdata","bc"] RUN ["qemu-arm-static","/bin/cp","usr/share/zoneinfo/America/Los_Angeles","/etc/localtime"] RUN ["qemu-arm-static","/bin/echo","America/Los_Angeles",">","/etc/timezone"] RUN ["qemu-arm-static","/bin/rm","-rf","/var/cache/apk/*"] RUN ["qemu-arm-static","/bin/sh"] COPY deploy /usr/local/deploy COPY deploy/default/bashrc /root/.bashrc COPY deploy/default/vimrc /root/.vimrc COPY src /src 

生成日志/错误

 @C02NN3NBG3QT:dev-resources $ ./publish-image + : router-logs + : quay.io + : quay.io/skilbjo/router-logs + : skilbjo@github.com ++ echo router-logs ++ tr - _ + : router_logs/config ++ echo router-logs ++ tr - _ + : router_logs/secrets + cat ../deploy/default/Dockerfile + sed 's;__CONSUL_PREFIX__;router_logs/config;' + sed 's;__CONSUL_SECRET_PREFIX__;router_logs/secrets;' + IMAGE_TAG=dev + cd .. ++ git rev-parse HEAD + echo 0a865e3918d584b4377fad9afe9ba28a1dbe5968 + docker build --rm -t quay.io/skilbjo/router-logs:dev . Sending build context to Docker daemon 8.713 MB Step 1 : FROM armhf/alpine:3.5 ---> 3ddfeafc01f0 Step 2 : ENV CONSUL_PREFIX router_logs/config ---> Using cache ---> e2aae782f6d8 Step 3 : ENV CONSUL_SECRET_PREFIX router_logs/secrets ---> Using cache ---> 71c863da2558 Step 4 : ENV QEMU_EXECVE 1 ---> Using cache ---> a7e80415d0d4 Step 5 : COPY deploy/qemu/qemu-arm-static /usr/bin/ ---> Using cache ---> 265df9b6575f Step 6 : RUN qemu-arm-static /sbin/apk fix ---> Using cache ---> def74ac67891 Step 7 : RUN qemu-arm-static /sbin/apk add -U bash ---> Running in 6f62d2ecd6b3 fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/armhf/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/armhf/APKINDEX.tar.gz (1/5) Installing ncurses-terminfo-base (6.0-r7) (2/5) Installing ncurses-terminfo (6.0-r7) (3/5) Installing ncurses-libs (6.0-r7) (4/5) Installing readline (6.3.008-r4) (5/5) Installing bash (4.3.46-r5) Executing bash-4.3.46-r5.post-install ERROR: bash-4.3.46-r5.post-install: script exited with error 1 Executing busybox-1.25.1-r0.trigger ERROR: busybox-1.25.1-r0.trigger: script exited with error 1 1 errors; 7 MiB in 16 packages The command 'qemu-arm-static /sbin/apk add -U bash' returned a non-zero code: 1 

项目回购在这里: https : //github.com/skilbjo/router-logs

原来FROM armhf/alpine:3.5不好, FROM resin/armhf-alpine:3.5会做的伎俩! 我很乐意能够看到scratch那些逗号,导致了armhf图像被borked,但现在,这个工程!