无法在 Alpine 上的多架构构建中安装 bash

Posted

技术标签:

【中文标题】无法在 Alpine 上的多架构构建中安装 bash【英文标题】:Can't install bash in multiarch build on Alpine 【发布时间】:2021-12-19 09:35:48 【问题描述】:

我正在尝试在 linux/amd64 Gitlab 运行器上为 linux/arm64/v8 构建图像。我用这个命令运行它:

docker buildx create --use
docker buildx build --platform linux/arm64/v8 -f Dockerfile.dev -t registry.gitlab.com/xxx:yyy --build-arg ENV=dev --build-arg COMPOSER_AUTH_FILE=./auth.json .

我的 Dockerfile 相当简单:

FROM alpine:latest

RUN apk update && \
    apk add --no-cache composer git bash openssh-client patch && \
    apk add --no-cache libzip-dev libpng-dev libxslt-dev curl-dev libxml2-dev icu-dev oniguruma-dev freetype-dev libjpeg-turbo-dev

但它失败了:

#6 [2/2] RUN apk update &&     apk add --no-cache composer git bash openssh-client patch &&     apk add --no-cache libzip-dev libpng-dev libxslt-dev curl-dev libxml2-dev icu-dev oniguruma-dev freetype-dev libjpeg-turbo-dev
#6 0.185 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/aarch64/APKINDEX.tar.gz
#6 0.832 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/aarch64/APKINDEX.tar.gz
#6 1.679 v3.14.2-119-g9c4e1aa60c [https://dl-cdn.alpinelinux.org/alpine/v3.14/main]
#6 1.679 v3.14.2-120-g90167408c8 [https://dl-cdn.alpinelinux.org/alpine/v3.14/community]
#6 1.679 OK: 14818 distinct packages available
#6 1.828 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/aarch64/APKINDEX.tar.gz
#6 2.263 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/aarch64/APKINDEX.tar.gz
#6 2.977 (1/31) Installing ncurses-terminfo-base (6.2_p20210612-r0)
#6 3.010 (2/31) Installing ncurses-libs (6.2_p20210612-r0)
#6 3.049 (3/31) Installing readline (8.1.0-r0)
#6 3.075 (4/31) Installing bash (5.1.4-r0)
#6 3.137 Executing bash-5.1.4-r0.post-install
#6 3.144 ERROR: bash-5.1.4-r0.post-install: script exited with error 1
#6 3.144 (5/31) Installing php7-common (7.4.25-r0)
#6 3.159 (6/31) Installing argon2-libs (20190702-r1)
#6 3.171 (7/31) Installing libedit (20210216.3.1-r0)
#6 3.190 (8/31) Installing pcre2 (10.36-r0)
#6 3.225 (9/31) Installing xz-libs (5.2.5-r0)
#6 3.244 (10/31) Installing libxml2 (2.9.12-r1)
#6 3.308 (11/31) Installing php7 (7.4.25-r0)
#6 3.503 (12/31) Installing php7-phar (7.4.25-r0)
#6 3.527 (13/31) Installing ca-certificates (20191127-r5)
#6 3.575 (14/31) Installing brotli-libs (1.0.9-r5)
#6 3.620 (15/31) Installing nghttp2-libs (1.43.0-r0)
#6 3.638 (16/31) Installing libcurl (7.79.1-r0)
#6 3.674 (17/31) Installing php7-curl (7.4.25-r0)
#6 3.690 (18/31) Installing php7-iconv (7.4.25-r0)
#6 3.702 (19/31) Installing php7-json (7.4.25-r0)
#6 3.716 (20/31) Installing oniguruma (6.9.7.1-r0)
#6 3.747 (21/31) Installing php7-mbstring (7.4.25-r0)
#6 3.815 (22/31) Installing php7-openssl (7.4.25-r0)
#6 3.833 (23/31) Installing libzip (1.7.3-r2)
#6 3.849 (24/31) Installing php7-zip (7.4.25-r0)
#6 3.863 (25/31) Installing composer (2.1.9-r0)
#6 3.939 (26/31) Installing expat (2.4.1-r0)
#6 3.958 (27/31) Installing git (2.32.0-r0)
#6 4.559 (28/31) Installing openssh-keygen (8.6_p1-r3)
#6 4.589 (29/31) Installing openssh-client-common (8.6_p1-r3)
#6 4.683 (30/31) Installing openssh-client-default (8.6_p1-r3)
#6 4.727 (31/31) Installing patch (2.7.6-r7)
#6 4.749 Executing busybox-1.33.1-r3.trigger
#6 4.754 ERROR: busybox-1.33.1-r3.trigger: script exited with error 1
#6 4.754 Executing ca-certificates-20191127-r5.trigger
#6 4.758 ERROR: ca-certificates-20191127-r5.trigger: script exited with error 1
#6 4.765 1 error; 36 MiB in 45 packages
#6 ERROR: process "/dev/.buildkit_qemu_emulator /bin/sh -c apk update &&     apk add --no-cache composer git bash openssh-client patch &&     apk add --no-cache libzip-dev libpng-dev libxslt-dev curl-dev libxml2-dev icu-dev oniguruma-dev freetype-dev libjpeg-turbo-dev" did not complete successfully: exit code: 1
------
 > [2/2] RUN apk update &&     apk add --no-cache composer git bash openssh-client patch &&     apk add --no-cache libzip-dev libpng-dev libxslt-dev curl-dev libxml2-dev icu-dev oniguruma-dev freetype-dev libjpeg-turbo-dev:
#6 3.958 (27/31) Installing git (2.32.0-r0)
#6 4.559 (28/31) Installing openssh-keygen (8.6_p1-r3)
#6 4.589 (29/31) Installing openssh-client-common (8.6_p1-r3)
#6 4.683 (30/31) Installing openssh-client-default (8.6_p1-r3)
#6 4.727 (31/31) Installing patch (2.7.6-r7)
#6 4.749 Executing busybox-1.33.1-r3.trigger
#6 4.754 ERROR: busybox-1.33.1-r3.trigger: script exited with error 1
#6 4.754 Executing ca-certificates-20191127-r5.trigger
#6 4.758 ERROR: ca-certificates-20191127-r5.trigger: script exited with error 1
#6 4.765 1 error; 36 MiB in 45 packages
------
Dockerfile.dev:3
--------------------
   2 |     
   3 | >>> RUN apk update && \
   4 | >>>     apk add --no-cache composer git bash openssh-client patch && \
   5 | >>>     apk add --no-cache libzip-dev libpng-dev libxslt-dev curl-dev libxml2-dev icu-dev oniguruma-dev freetype-dev libjpeg-turbo-dev
   6 |     
--------------------
error: failed to solve: process "/dev/.buildkit_qemu_emulator /bin/sh -c apk update &&     apk add --no-cache composer git bash openssh-client patch &&     apk add --no-cache libzip-dev libpng-dev libxslt-dev curl-dev libxml2-dev icu-dev oniguruma-dev freetype-dev libjpeg-turbo-dev" did not complete successfully: exit code: 1
make: *** [Makefile:18: feature] Error 1
Cleaning up file based variables
00:01
ERROR: Job failed: exit code 2

它是 Gitlab 运行器版本 13.4.1 和 Docker 执行器 docker:stable。对于这个问题我能做些什么?

【问题讨论】:

【参考方案1】:

我的方法存在三个问题:

    我需要安装 buildx 扩展
- mkdir -p ~/.docker/cli-plugins
- wget -qO ~/.docker/cli-plugins/docker-buildx `wget -O - https://api.github.com/repos/docker/buildx/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4`
- chmod a+x ~/.docker/cli-plugins/docker-buildx
    我不得不通过 qemu 安装模拟器
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    我在 CentOS 7 上使用 qemu 不支持的内核 3.13 托管 Gitlab 运行程序。在使用内核版本 5.4 更新到 Ubuntu 20.04 后,它工作得很好。

【讨论】:

以上是关于无法在 Alpine 上的多架构构建中安装 bash的主要内容,如果未能解决你的问题,请参考以下文章

基于alpine镜像构建的步骤

基于alpine镜像构建的步骤

为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”

基于alpine基础镜像构建jdk镜像以及tomcat镜像及业务构建

从“openjdk:8-jdk-alpine”为 Spring Boot 应用程序构建 docker 映像时无法运行“RUN ./mvnw dependency:go-offline -B”

docker build 时 alpine 无法安装软件问题的解决