【问题标题】:awscli version 2 on alpine linux高山 linux 上的 awscli 版本 2
【发布时间】:2022-05-01 06:09:00
【问题描述】:

我试图将 awscli_v2 放入基于 alpine 的 docker 容器中,但发现它失败并显示以下错误消息:

/aws/install:第 78 行:/aws/dist/aws:未找到

考虑到文件本身就在那里并且可以用 ls 列出,我猜想可执行文件 ./aws/dist/aws 所依赖的一些库在 alpine 上不存在。有人知道可能是哪些库吗?

【问题讨论】:

  • 我不知道缺少什么,但我遇到了同样的问题。当我使用ubuntu 作为基本图像时,它对我有用。 TBF,AWS documentation 确实将 CentOS、Fedora、Ubuntu、Amazon Linux 1 和 Amazon Linux 2 列为唯一受支持的操作系统,但我同意能够构建 alpine 映像会很好。
  • 项目GitHub github.com/aws/aws-cli/issues/4685有一个问题

标签: amazon-web-services aws-cli


【解决方案1】:

实际上,只要稍加努力,就可以在 Alpine 上运行 AWS CLI v2:

ARG ALPINE_VERSION=3.15.4

FROM alpine:${ALPINE_VERSION}

ARG GLIBC_VERSION=2.34-r0
ARG AWSCLI_VERSION=2.6.1

# install glibc compatibility for alpine
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 \
        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 \
    && 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/*

上述 Dockerfile 将为 Alpine 安装“glibc”包,以便 AWS CLI 能够找到所需的共享库。 Dockerfile 还删除了一些我们可能不需要的东西,例如自动完成和示例。如果您需要其他一些特定的包,当然可以将它们添加到 Dockerfile。

【讨论】:

  • 按预期工作!
  • 很好的答案。几个小时以来,我一直在寻找 gclib 问题的简单实现方法,但偶然发现了这一点。真的很有帮助,谢谢。
  • 这让我很开心。谢谢!
  • 如果您需要 unicode 支持,可以尝试添加:curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-i18n-${GLIBC_VER}.apk && apk add glibc-i18n-${GLIBC_VER}.apk && /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8
  • 没关系,好​​像有60Mb左右,大概是官方容器大小的一半
【解决方案2】:

AWS CLI 版本 2 是针对 glibc 编译的,glibc 是 GNU 项目对 C 标准库的实现。大多数常见的 Linux 发行版使用 glibc,但 Alpine Linux 是基于 musl libc

由于针对 glibc 编译的二进制文件与 musl 不兼容,AWS CLI 版本 2 无法在 Alpine Linux 上运行。

在 Alpine Linux 上运行 AWS CLI 版本 2 的最佳方式是让 Amazon 提供以下之一:

  • 针对 musl 编译的二进制文件
  • 可在 Alpine Linux 上编译的源代码分发版
  • 基于 Alpine Linux 的官方 AWS CLI Docker 镜像

【讨论】:

    【解决方案3】:

    也可以使用https://git.adelielinux.org/adelie/gcompat

    apk add gcompat
    

    来源:https://wiki.alpinelinux.org/wiki/Running_glibc_programs

    编辑示例:

    ENV AWS_CLI_VER=2.0.30
    
    RUN apk update && apk add --no-cache curl gcompat zip &&  \
        curl -s https://awscli.amazonaws.com/awscli-exe-linux-x86_64-${AWS_CLI_VER}.zip -o awscliv2.zip && \
        unzip awscliv2.zip && ./aws/install
    

    【讨论】:

    • 您能否在答案中添加更多详细信息?使用此程序包设置和运行 AWS CLI 的完整脚本?因为我尝试并得到了ImportError: Error relocating /usr/local/aws-cli/v2/dist/_awscrt.cpython-38-x86_64-linux-gnu.so: pthread_attr_setaffinity_np: symbol not found 错误。
    • 如果我猜的话,您尝试通过 pip 安装 awscliv2?如果是这样,请尝试使用 curl 直接获取 zip 二进制文件。最新版本的 alpine 对我有用。
    • 我已经下载了 awscli v2 linux 二进制文件并尝试在安装了 gcompat 的情况下按原样运行它们。您能否通过明确的可重复步骤来扩展您的答案以重复您的成功?
    • 在撰写本文时,AWS_CLI_VERSION=2.1.39 与我安装的 gcompat 一起使用,而不是最新的 AWS CLI,在撰写本文时是 2.2.43
    • 可以确认来自@skim 的评论,带 gcompat 的 2.1.39 也适用于我(与较新的版本不同)。
    【解决方案4】:

    稍微修改一下 AnthonyC 的答案就可以了:

    FROM frolvlad/alpine-glibc:alpine-3.14
    
    ENV AWS_CLI_VER=2.2.43
    
    RUN apk update && apk add --no-cache curl zip &&  \
        curl -s https://awscli.amazonaws.com/awscli-exe-linux-x86_64-${AWS_CLI_VER}.zip -o awscliv2.zip && \
        unzip awscliv2.zip && ./aws/install
    

    【讨论】:

    • 它不起作用,误导性答案!
    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多