Amazon web services 高山linux上的awscli版本2

Amazon web services 高山linux上的awscli版本2,amazon-web-services,aws-cli,Amazon Web Services,Aws Cli,我试图将awscli_v2放入一个基于alpine的docker容器中,并看到它失败,出现以下错误消息: /aws/安装:第78行:/aws/dist/aws:未找到 考虑到文件本身就在那里,并且可以用ls列出,我猜想可执行文件/aws/dist/aws所依赖的一些库在alpine上不存在。有人知道可能是哪些库吗?AWS CLI版本2是根据glibc编译的,glibc是GNU项目对C标准库的实现。大多数常见的Linux发行版都使用glibc,但Alpine Linux是基于glibc的 由于针对

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

/aws/安装:第78行:/aws/dist/aws:未找到


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

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

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

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

  • 根据musl编译的二进制文件
  • 源代码发行版,可在Alpine Linux上编译
  • 基于Alpine Linux的官方AWS CLI Docker映像

实际上,只要稍加努力,就可以在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/*

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

我在GitHub中找到了这个解决方案,它就像一个符咒-


我不知道遗漏了什么,但我也有同样的问题。当我使用
ubuntu
作为基本图像时,它对我很有用。TBF,确实将CentOS、Fedora、Ubuntu、Amazon Linux 1和Amazon Linux 2列为唯一受支持的操作系统,但我同意能够构建一个alpine映像会很好。GitHub项目中存在一个问题,正如预期的那样工作!回答得很好。几个小时以来,我一直在寻找gclib问题的一个简单实现,但我偶然发现了这个问题。这真的很有帮助,谢谢。这让我很开心。非常感谢。如果需要unicode支持,可以尝试添加以下内容:
curl-sLOhttps://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/GLIBC-i18n-${GLIBC_VER}.apk&&apk添加GLIBC-i18n-${GLIBC_VER}.apk&/usr/GLIBC compat/bin/localedef-i en_US-f UTF-8 en_-US.UTF-8
,所以大约是官方集装箱的一半大小
FROM python:3-alpine3.13 AS installer

ENV AWSCLI_VERSION=2.2.0

RUN apk add --no-cache \
    gcc \
    git \
    libc-dev \
    libffi-dev \
    openssl-dev \
    py3-pip \
    zlib-dev \
    make \
    cmake

RUN git clone --recursive  --depth 1 --branch ${AWSCLI_VERSION} --single-branch https://github.com/aws/aws-cli.git

WORKDIR /aws-cli

# Follow https://github.com/six8/pyinstaller-alpine to install pyinstaller on alpine
RUN pip install --no-cache-dir --upgrade pip \
    && pip install --no-cache-dir pycrypto \
    && git clone --depth 1 --single-branch --branch v$(grep PyInstaller requirements-build.txt | cut -d'=' -f3) https://github.com/pyinstaller/pyinstaller.git /tmp/pyinstaller \
    && cd /tmp/pyinstaller/bootloader \
    && CFLAGS="-Wno-stringop-overflow -Wno-stringop-truncation" python ./waf configure --no-lsb all \
    && pip install .. \
    && rm -Rf /tmp/pyinstaller \
    && cd - \
    && boto_ver=$(grep botocore setup.cfg | cut -d'=' -f3) \
    && git clone --single-branch --branch v2 https://github.com/boto/botocore /tmp/botocore \
    && cd /tmp/botocore \
    && git checkout $(git log --grep $boto_ver --pretty=format:"%h") \
    && pip install . \
    && rm -Rf /tmp/botocore  \
    && cd -

RUN sed -i '/botocore/d' requirements.txt \
    && scripts/installers/make-exe

RUN unzip dist/awscli-exe.zip && \
    ./aws/install --bin-dir /aws-cli-bin

FROM alpine:3.13

RUN apk --no-cache add groff

COPY --from=installer /usr/local/aws-cli/ /usr/local/aws-cli/
COPY --from=installer /aws-cli-bin/ /usr/local/bin/