alpine linux 上的 awscli 版本 2

Kon*_*stl 36 amazon-web-services aws-cli

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

/aws/install: line 78: /aws/dist/aws: not found

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

bla*_*eij 63

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

FROM alpine:3.11

ENV GLIBC_VER=2.31-r0

# 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_VER}/glibc-${GLIBC_VER}.apk \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-i18n-${GLIBC_VER}.apk \
    && apk add --no-cache \
        glibc-${GLIBC_VER}.apk \
        glibc-bin-${GLIBC_VER}.apk \
        glibc-i18n-${GLIBC_VER}.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.zip -o awscliv2.zip \
    && unzip awscliv2.zip \
    && aws/install \
    && rm -rf \
        awscliv2.zip \
        aws \
        /usr/local/aws-cli/v2/*/dist/aws_completer \
        /usr/local/aws-cli/v2/*/dist/awscli/data/ac.index \
        /usr/local/aws-cli/v2/*/dist/awscli/examples \
        glibc-*.apk \
    && apk --no-cache del \
        binutils \
        curl \
    && rm -rf /var/cache/apk/*
Run Code Online (Sandbox Code Playgroud)

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

  • 按预期工作! (5认同)
  • 没关系,看起来大约有 60Mb,大约是官方容器大小的一半 (3认同)
  • 很好的答案。我几个小时以来一直在寻找 gclib 问题的简单实现,并偶然发现了这一点。这真的很有帮助,谢谢。 (2认同)

msm*_*ens 17

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 镜像


Ant*_*nyC 11

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

apk add gcompat
Run Code Online (Sandbox Code Playgroud)

来源: 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
Run Code Online (Sandbox Code Playgroud)

  • 截至撰写本文时,AWS_CLI_VERSION=2.1.39 使用我安装的 gcompat,而不是最新的 AWS CLI,在撰写本文时,最新的 AWS CLI 是 2.2.43 (7认同)
  • 您能否在答案中添加更多详细信息?使用此程序包设置和运行 AWS CLI 的完整脚本?因为我尝试并得到了“ImportError:重定位/usr/local/aws-cli/v2/dist/_awscrt.cpython-38-x86_64-linux-gnu.so:pthread_attr_setaffinity_np:找不到符号时出错”错误。 (4认同)
  • 可以确认 @skim 的评论,2.1.39 w/ gcompat 也适合我(与新版本不同)。 (2认同)