You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Alpine镜像中Terraform安装包的部署失败问题?

问题描述

我通过自定义Docker镜像结合Jenkins部署Terraform代码,镜像的Dockerfile内容如下:

FROM alpine:latest

ARG GLIBC_VERSION=2.35-r0
ARG AWSCLI_VERSION=2.11.11

RUN apk update

RUN apk --no-cache add \
        binutils \
        curl \
    && curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-i18n-${GLIBC_VERSION}.apk \
    && apk add --no-cache --force-overwrite \
        glibc-${GLIBC_VERSION}.apk \
        glibc-bin-${GLIBC_VERSION}.apk \
        glibc-i18n-${GLIBC_VERSION}.apk \
    && /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 \
    && ln -sf /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2 \
    && curl -sL https://awscli.amazonaws.com/awscli-exe-linux-x86_64-${AWSCLI_VERSION}.zip -o awscliv2.zip \
    && unzip awscliv2.zip \
    && aws/install \
    && rm -rf \
        awscliv2.zip \
        aws \
        /usr/local/aws-cli/v2/current/dist/aws_completer \
        /usr/local/aws-cli/v2/current/dist/awscli/data/ac.index \
        /usr/local/aws-cli/v2/current/dist/awscli/examples \
        glibc-*.apk \
    && find /usr/local/aws-cli/v2/current/dist/awscli/botocore/data -name examples-1.json -delete \
    && apk --no-cache del \
        binutils \
        curl \
    && rm -rf /var/cache/apk/*

RUN apk add terraform --repository=https://dl-cdn.alpinelinux.org/alpine/latest-stable/community

今日起执行安装Terraform的指令时失败,报错找不到对应包,具体错误信息:

fetch https://dl-cdn.alpinelinux.org/alpine/latest-stable/community/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz
ERROR: unable to select packages:
  terraform (no such package):
    required by: world[terraform]
The command '/bin/sh -c apk add terraform --repository=https://dl-cdn.alpinelinux.org/alpine/latest-stable/community' returned a non-zero code: 1

同时注意到Terraform官网今日有版本更新。

问题原因
  1. Alpine仓库包移除:当前latest-stable指向的Alpine v3.19社区仓库中,已经不再包含Terraform包,可能是Alpine社区移除了该包,或者HashiCorp调整了分发策略。
  2. 版本同步问题:Terraform官网的版本更新后,Alpine社区仓库的包没有同步更新,甚至直接下架了旧版本包。
修复方案

方案1:改用HashiCorp官方方式安装(推荐)

直接从HashiCorp官方下载二进制包安装,不受Alpine仓库变更影响,可灵活控制版本:
修改Dockerfile中安装Terraform的RUN指令为:

# 临时安装curl用于下载,完成后删除
RUN apk add --no-cache curl \
    # 自动获取最新稳定版,如需固定版本可替换为具体版本号,比如TERRAFORM_VERSION="1.6.6"
    && TERRAFORM_VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r '.current_version') \
    && curl -sLO https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip \
    && unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip \
    && mv terraform /usr/local/bin/ \
    && rm -rf terraform_${TERRAFORM_VERSION}_linux_amd64.zip \
    && apk del curl

如果需要固定Terraform版本,直接替换TERRAFORM_VERSION变量值即可。

方案2:指定包含Terraform的Alpine版本仓库

查询确认仍包含Terraform包的Alpine版本(比如v3.18或v3.20),修改安装指令的仓库路径:

RUN apk add terraform --repository=https://dl-cdn.alpinelinux.org/alpine/v3.18/community

注意:执行前需确认目标版本的社区仓库确实存在Terraform包。

方案3:锁定Alpine基础镜像版本

将Dockerfile开头的FROM alpine:latest改为包含Terraform包的旧版本Alpine镜像,比如:

FROM alpine:3.18

同时保留原安装Terraform的指令,或对应版本的仓库路径。

内容的提问来源于stack exchange,提问作者belony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:47:02