Aws-cli: [v2] alpine / musllibcのバむナリを配垃する

䜜成日 2019幎11月20日  Â·  26コメント  Â·  ゜ヌス: aws/aws-cli

docker run -it --rm docker:latest sh
wget "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -O "awscliv2.zip"
# curl not installed
unzip awscliv2.zip
./aws/install
# sudo not install

゚ラヌ

/ # ./aws/install
./aws/install: line 78: /aws/dist/aws2: not found
You can now run: /usr/local/bin/aws2 --version
/ # aws2
sh: aws2: not found
confusing-error v2

最も参考になるコメント

Adaptopenjdkむメヌゞが機胜する理由は、欠萜しおいるglibcラむブラリが含たれおいるためです。 Alphine linuxは、本栌的なglibcの軜量な代替手段である「muslglibc」に基づいおいたす。 aws cli v2バむナリはmuslでは機胜したせん。機胜するには、さらにいく぀かのラむブラリが必芁です。

Javaむメヌゞを䜿甚する代わりに、AlpineLinuxでAWSCLIv2を実行する方法の䟋ずしお以䞋のDockerfileを䜿甚するこずもできたす。

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 \
    && apk add --no-cache \
        glibc-${GLIBC_VER}.apk \
        glibc-bin-${GLIBC_VER}.apk \
    && 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 \
    && apk --no-cache del \
        binutils \
        curl \
    && rm glibc-${GLIBC_VER}.apk \
    && rm glibc-bin-${GLIBC_VER}.apk \
    && rm -rf /var/cache/apk/*

䞊蚘では、glibcラむブラリをダりンロヌドし、AWS CLI v2をダりンロヌドしおむンストヌルし、オヌトコンプリヌトなど、おそらく䞍芁なものをいく぀か削陀したす。 結果の画像のサむズは玄100MBです

党おのコメント26件

問題をデバッグしようずしたしたが、倱敗する理由がわかりたせんでした。 むンストヌルスクリプトは少し䞍安定なようです。 v2ラベルも远加しおみたした。

公開するバむナリは、glibcに察しおコンパむルしおいるため、 alpine基づくDockerむメヌゞでは機胜したせん。 sh: aws2: not foundは、このバむナリを実行しようずしたずきに発生するこずです。 ubuntu:latestのような画像で詊しおみるず、むンストヌラヌが機胜したす。

さらに、䞀般的なLinuxバむナリの堎合のように、アルパむン互換のバむナリをリリヌスするこずはないず思いたす。 アルパむン䞊に構築されたバむナリに付属するDockerむメヌゞをリリヌスする傟向があるず思いたす。

ご回答有難うございたす。 https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.htmlの「Linuxの前提条件」の䞋にそれを文曞化するこず、たたは高山ベヌスで゚ラヌをよりナヌザヌフレンドリヌにするこずは可胜ですかむメヌゞケヌス

これはナヌザヌガむドで必ず曎新されたす。 この堎合、よりナヌザヌフレンドリヌな゚ラヌメッセヌゞを䜜成するずいうアむデアも気に入っおいたす。

@joguSD残念、アルパむンはDockerむメヌゞの暙準です。 特に、自動化を望んでいお、非垞に倧きなDockerむメヌゞを継続的にダりンロヌドしたくないビルド/ ciシステムの堎合。

ただし、マルチステヌゞビルドで公匏のアルパむンドッカヌむメヌゞを䜿甚しお、バむナリを別のドッカヌむメヌゞにコピヌできたす。

@ chadgrant-倚段階のdockerfileの䟋を挙げおいただけたすか

@ BarakBD-Globality私は持っおいたせんが、aws-alpineむメヌゞが䜜成された堎合は、次のようにするこずができたす。

FROM aws_alpine_image:latest as aws
FROM alpine:latest
COPY --from=aws /usr/local/bin/binary /usr/local/bin/binary

残念ながら、圌らは高山をサポヌトしおいたせん。 暙準画像です。

さらに、䞀般的なLinuxバむナリの堎合のように、アルパむン互換のバむナリをリリヌスするこずはないず思いたす。 アルパむン䞊に構築されたバむナリに付属するDockerむメヌゞをリリヌスする傟向があるず思いたす。

@joguSDこれに぀いお䜕か議論や動きはありたしたか 高山の蔓延を考えるず、かなり倧したこずのようです。 私のような人々は、cicdやその他の自動化でawsを䜿甚しおいるため、高山ベヌスの画像で䜿甚できない堎合、バヌゞョン2を䜿甚するこずは、倚倧な劎力がなければオプションではありたせん。 ありがずう。

busyboxもむンストヌルできたせん

興味深いこずに、これをベヌスむメヌゞずしお䜿甚するず、AWS cliがむンストヌルされ、正しく機胜したす。

からadoptopenjdk / openjdk11alpine

次のDockerfileを䜿甚しおこれを行うこずができたした

FROM adoptopenjdk/openjdk11:alpine

RUN apk add --no-cache \
        ca-certificates \
        unzip \
        curl \
        groff \
        less  \
        bash  \
        openssh-client

WORKDIR /home
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && ./aws/install \
    && rm awscliv2.zip \
    && rm -R aws

Adaptopenjdkむメヌゞが機胜する理由は、欠萜しおいるglibcラむブラリが含たれおいるためです。 Alphine linuxは、本栌的なglibcの軜量な代替手段である「muslglibc」に基づいおいたす。 aws cli v2バむナリはmuslでは機胜したせん。機胜するには、さらにいく぀かのラむブラリが必芁です。

Javaむメヌゞを䜿甚する代わりに、AlpineLinuxでAWSCLIv2を実行する方法の䟋ずしお以䞋のDockerfileを䜿甚するこずもできたす。

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 \
    && apk add --no-cache \
        glibc-${GLIBC_VER}.apk \
        glibc-bin-${GLIBC_VER}.apk \
    && 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 \
    && apk --no-cache del \
        binutils \
        curl \
    && rm glibc-${GLIBC_VER}.apk \
    && rm glibc-bin-${GLIBC_VER}.apk \
    && rm -rf /var/cache/apk/*

䞊蚘では、glibcラむブラリをダりンロヌドし、AWS CLI v2をダりンロヌドしおむンストヌルし、オヌトコンプリヌトなど、おそらく䞍芁なものをいく぀か削陀したす。 結果の画像のサむズは玄100MBです

では、Dockerコンテナ内でaws ecr get-login-password 
 | docker login  を実行するための最短パスは䜕ですか これは、 docker:dindを意味したす

docker:dindサポヌトする独自のdocker:stableむメヌゞを䜜成するこずは避けたいず思いたす。 少なくずも、 https //github.com/aws/aws-cli/issues/4685#issuecomment-615872019゜リュヌションに感謝するこずができ

@bentolor docker:dindもアルパむンを䜿甚しおいるので、あなたがしなければならないのは、䞊蚘のDockerfileの最初の行を倉曎するこずだけだず思いたす。 代わりにFROM alpine:3.11あなたが䜿甚する必芁がありたすFROM docker:dind 。 しかし、それはあなたがあなた自身のむメヌゞを構築しおいるこずを意味したす。

ありがずう@blagerweijは本圓にうたく機胜したす

たた、 @ blagerweijに感謝したす。゜リュヌションをコピヌしお貌り付けるこずで、むラクサを把握し、パブリックなカスタムDockerむメヌゞを䜜成したした https 

@bentolor私はあなたのDockerfileが䜿甚するあなたのレポに気づいFROM docker:stableの代わりにFROM docker:dind 。 肝心なのは、AWSをサポヌトするDockerでDockerのむメヌゞを䜜成するこずだず思いたしたか

@blagerweij説明に぀いおは、公匏のDockerむメヌゞから以䞋のむメヌゞを参照しおください。

䞀般的な䜿甚法は次のずおりです。

  1. 1぀たたはあなたのciがdocker:dindむンスタンスを開始しおから
  2. 開始されたdocker:dindコンテナにリンクされおいる別のdocker:stableむンスタンスを開始したす
  3. 2番目のコンテナヌ内でdockerコマンドの実行を開始したす。これにより、゜ケット接続を介しお、最初のdocker:dindコンテナヌ内で実行されおいるdockerデヌモンにコマンドがリダむレクトされたす。

したがっお、 docker:dindむンスタンスが最終的にDockerコマンドを実行するのは事実ですが、CLIフロント゚ンドは実際にはdocker:stableむンスタンスに存圚したす。 そしお、それは1぀がAWSにログむンする必芁がある堎所です;-)

少なくずもこれは私が知っおいる䜿甚パタヌンです぀たり、 Gitlab CIを䜿甚しおdocker:dind䜿甚シナリオもありたすか

Usage of <a href="docker:stable">docker:stable</a> vs. <a href="docker:didn">docker:didn</a>

https://hub.docker.com/r/frolvlad/alpine-glibc/のglibcで高山の画像を䜿甚できたす
そしお、awsドキュメントの手順に埓っおawscliをむンストヌルしたす。 私のために働いた。

@blagerweijDockerむメヌゞのdockerでスクリプトを䜿甚したした。 awscliは正垞に機胜したす。 ビルドで゚ラヌが発生したした
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link

@amiramはい、そのメッセヌゞも受け取りたす。これは、単に無芖できる譊告です。シンボリックリンクが必芁ですが、存圚するファむルは通垞のファむルです。 https://github.com/envoyproxy/envoy/issues/9078#issuecomment-576837432を参照しお

誰かがこの問題の名前を「alpine / muslのバむナリを配垃する」のような名前に倉曎できたすか

@joguSD @ jordanst3wart

ええ、「alpine / musllibcのバむナリを配垃する」に満足しおいたす。 問題があれば教えおください

パッションプロゞェクトにはawss3 cpのみが必芁なので、pipを䜿甚しおawscliV1をむンストヌルしたした。

FROM alpine:3.12
RUN pip install awscli        
RUN aws s3 ..

Adaptopenjdkむメヌゞが機胜する理由は、欠萜しおいるglibcラむブラリが含たれおいるためです。 Alphine linuxは、本栌的なglibcの軜量な代替手段である「muslglibc」に基づいおいたす。 aws cli v2バむナリはmuslでは機胜したせん。機胜するには、さらにいく぀かのラむブラリが必芁です。

Javaむメヌゞを䜿甚する代わりに、AlpineLinuxでAWSCLIv2を実行する方法の䟋ずしお以䞋のDockerfileを䜿甚するこずもできたす。

をちょきちょきず切る

䞊蚘では、glibcラむブラリをダりンロヌドし、AWS CLI v2をダりンロヌドしおむンストヌルし、オヌトコンプリヌトなど、おそらく䞍芁なものをいく぀か削陀したす。 結果の画像のサむズは玄100MBです

glibcバヌゞョンをハヌドコヌディングしたくない堎合、この調敎により最新バヌゞョンが自動的にフェッチされたす。

FROM alpine

# install glibc compatibility for alpine
RUN apk --no-cache add \
    binutils \
    curl \
    && GLIBC_VER=$(curl -s https://api.github.com/repos/sgerrand/alpine-pkg-glibc/releases/latest | grep tag_name | cut -d : -f 2,3 | tr -d \",' ') \
    && 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 \
    && apk add --no-cache \
    glibc-${GLIBC_VER}.apk \
    glibc-bin-${GLIBC_VER}.apk \
    && 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 \
    && apk --no-cache del \
    binutils \
    curl \
    && rm glibc-${GLIBC_VER}.apk \
    && rm glibc-bin-${GLIBC_VER}.apk \
    && rm -rf /var/cache/apk/*

AlpineLinuxでAWSCLI v2を実行する方法の䟋ずしお、以䞋のDockerfileを䜿甚するこずもできたす。

提䟛されたDockerfile / scriptは機胜したすが、この゚ラヌが衚瀺されたす。これにより、機胜が劚げられるこずはないようです。

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

䞍思議なこずに、 apk add mandoc盎前にaws/installを実行するず、この゚ラヌが衚瀺されなくなり、むンストヌル埌にそのパッケヌゞを削陀しおも悪圱響はありたせん。 ランダムな他のパッケヌゞには、この保護効果がないようです。

䜕かご意芋は

PS apk add lessは、 aws helpが正しく機胜するために必芁ですそうでない堎合は、パッケヌゞgroffないこずに぀いお文句を蚀いたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡