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
Fehler mit:
/ # ./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
Ich habe versucht, das Problem zu debuggen, konnte aber nicht herausfinden, warum es fehlschlägt. Es scheint mir, dass das Installationsskript nur ein bisschen flockig ist. Ich habe auch versucht, das v2-Label hinzuzufügen.
Die von uns veröffentlichten Binärdateien funktionieren nicht für Docker-Images, die auf alpine
basieren, da wir sie gegen glibc kompilieren. Das sh: aws2: not found
passiert, wenn Sie versuchen, diese Binärdatei auszuführen. Wenn Sie es mit einem Image wie ubuntu:latest
versuchen, funktioniert das Installationsprogramm.
Außerdem glaube ich nicht, dass wir jemals eine alpine kompatible Binärdatei veröffentlichen würden, wie wir es für unsere allgemeine Linux-Binärdatei tun. Ich denke, wir wären eher geneigt, einfach ein Docker-Image zu veröffentlichen, das mit unserer auf Alpine basierenden Binärdatei geliefert wird.
Danke für deine Antwort. Ist es möglich, das hier https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html unter "Voraussetzungen für Linux" zu dokumentieren oder den Fehler im alpine based benutzerfreundlicher zu gestalten? Bild Fall?
Wir werden dafür sorgen, dass dies im Benutzerhandbuch aktualisiert wird. Ich mag auch die Idee, für diesen Fall eine benutzerfreundlichere Fehlermeldung zu erstellen.
@joguSD schade, alpine ist der Standard für Docker-Images. Besonders bei Build-/CI-Systemen, die automatisieren möchten und nicht ständig sehr große Docker-Images herunterladen möchten.
Kann jedoch ein offizielles alpines Docker-Image in einem mehrstufigen Build verwenden, um die Binärdatei in ein anderes Docker-Image zu kopieren.
@chadgrant - können Sie bitte ein Beispiel für Ihre mehrstufige Dockerdatei geben?
@BarakBD-Globality Ich habe keine, aber wenn das aws-alpine-Image jemals erstellt wird, können Sie einfach Folgendes tun:
FROM aws_alpine_image:latest as aws
FROM alpine:latest
COPY --from=aws /usr/local/bin/binary /usr/local/bin/binary
Schade, dass sie Alpin nicht unterstützen. Es ist ein Standardbild.
Außerdem glaube ich nicht, dass wir jemals eine alpine kompatible Binärdatei veröffentlichen würden, wie wir es für unsere allgemeine Linux-Binärdatei tun. Ich denke, wir wären eher geneigt, einfach ein Docker-Image zu veröffentlichen, das mit unserer auf Alpine basierenden Binärdatei geliefert wird.
@joguSD gab es hierzu eine Diskussion oder einen Antrag? Es scheint eine ziemlich große Sache zu sein, wenn man die Prävalenz von Alpine bedenkt. Leute wie ich verwenden aws
in ihrer Cicd- und anderen Automatisierung. Wenn es also für alpenbasierte Bilder nicht verfügbar ist, ist die Verwendung von Version 2 ohne erheblichen Aufwand nicht einmal eine Option! Vielen Dank.
kann auch nicht in busybox
installiert werden
Interessanterweise wird die AWS-Cli installiert und funktioniert ordnungsgemäß, wenn Sie dies als Basis-Image verwenden.
VON adoptopenjdk/openjdk11:alpine
Ich konnte dies mit dem folgenden Dockerfile tun
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
Der Grund dafür, dass das adoptopenjdk-Image funktioniert, ist, dass es die fehlenden glibc-Bibliotheken enthält. Alphine linux basiert auf 'musl glibc', einer leichtgewichtigen Alternative zu einer ausgewachsenen glibc. Die aws cli v2-Binärdateien funktionieren nicht mit musl, sie benötigen ein paar weitere Bibliotheken, um zu funktionieren.
Anstatt das Java-Image zu verwenden, können Sie auch das Dockerfile unten als Beispiel für die Ausführung von AWS CLI v2 unter Alpine Linux verwenden:
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/*
Das Obige lädt die glibc-Bibliotheken herunter, lädt AWS CLI v2 herunter und installiert sie und entfernt einige Dinge, die wir wahrscheinlich nicht benötigen, wie z. B. die automatische Vervollständigung. Das resultierende Bild ist etwa 100 MB groß
Was ist also der kürzeste Weg, um ein aws ecr get-login-password … | docker login …
in einem Docker-Container zum Laufen zu bringen? (was bedeutet: docker:dind
)?
Ich würde es gerne vermeiden, mein eigenes docker:stable
Image mit docker:dind
Unterstützung zu erstellen. Zumindest konnte ich dank https://github.com/aws/aws-cli/issues/4685#issuecomment -615872019 eine Lösung finden. Dank dafür!
@bentolor Da docker:dind
auch alpine verwendet, vermute ich, dass Sie nur die erste Zeile des oben genannten Dockerfiles ändern müssen. Anstelle von FROM alpine:3.11
sollten Sie FROM docker:dind
. Es bedeutet jedoch, dass Sie Ihr eigenes Image aufbauen....
danke @blagerweij funktioniert wirklich gut
Danke auch @blagerweij : Ich habe die Brennnessel eingefügt habe: https://hub.docker.com/r/bentolor/docker-dind-awscli
@bentolor Ich habe in Ihrem Repo bemerkt, dass Ihr Dockerfile FROM docker:stable
anstelle von FROM docker:dind
. Ich dachte, es geht darum, ein Image für Docker in Docker mit AWS-Unterstützung zu erstellen?
@blagerweij Siehe das Bild unten vom offiziellen Docker-Bild zur Veranschaulichung.
Die typische Verwendung ist:
docker:dind
Instanz und danndocker:stable
Instanz, die mit dem gestarteten docker:dind
Container verknüpft istdocker
Befehlen im zweiten Container, der die Befehle über eine Socket-Verbindung zum Docker-Daemon umleitet, der im ersten docker:dind
Container ausgeführt wird.Deshalb: Es stimmt zwar, dass die docker:dind
Instanz schließlich Ihre Docker-Befehle ausführt, Ihr CLI-Frontend lebt jedoch tatsächlich in einer docker:stable
Instanz. Und dort muss man sich zB in AWS einloggen ;-)
Zumindest ist dies das mir bekannte Verwendungsmuster (dh die Verwendung von Gitlab CI zum Erstellen von Docker-Images). Vielleicht gibt es auch direkte docker:dind
Nutzungsszenarien?
Man kann alpines Image mit glibc von https://hub.docker.com/r/frolvlad/alpine-glibc/ verwenden
und installieren Sie AWS CLI, indem Sie die Schritte aus der AWS-Dokumentation befolgen. Hat bei mir funktioniert.
@blagerweij Ich habe Ihr Skript mit dem Docker im Docker-Image verwendet. AWS CLI funktioniert einwandfrei. Ich habe gerade einen Fehler beim Build:
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
@amiram Ja, ich erhalte auch diese Nachricht, das ist eine Warnung, die Sie einfach ignorieren können: Es wird ein Symlink erwartet, aber die vorhandene Datei ist eine normale Datei. Siehe https://github.com/envoyproxy/envoy/issues/9078#issuecomment -576837432
Könnte jemand dieses Problem umbenennen in etwa: "Binärdateien für Alpin / Muss verteilen"?
@joguSD @jordanst3wart
Ja, ich bin zufrieden mit "Binärdateien für alpine / musl libc verteilen". Lass mich wissen, wenn du irgendwelche Probleme hast
Ich brauche nur aws s3 cp für ein Leidenschaftsprojekt, also habe ich awscli V1 mit pip installiert:
FROM alpine:3.12
RUN pip install awscli
RUN aws s3 ..
Der Grund dafür, dass das adoptopenjdk-Image funktioniert, ist, dass es die fehlenden glibc-Bibliotheken enthält. Alphine linux basiert auf 'musl glibc', einer leichtgewichtigen Alternative zu einer ausgewachsenen glibc. Die aws cli v2-Binärdateien funktionieren nicht mit musl, sie benötigen ein paar weitere Bibliotheken, um zu funktionieren.
Anstatt das Java-Image zu verwenden, können Sie auch das Dockerfile unten als Beispiel für die Ausführung von AWS CLI v2 unter Alpine Linux verwenden:
schnipsen
Das Obige lädt die glibc-Bibliotheken herunter, lädt AWS CLI v2 herunter und installiert sie und entfernt einige Dinge, die wir wahrscheinlich nicht benötigen, wie z. B. die automatische Vervollständigung. Das resultierende Bild ist etwa 100 MB groß
Diese Anpassung ruft automatisch die neueste Version ab, wenn Sie die glibc-Version nicht hart codieren möchten:
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/*
Sie können auch das Dockerfile unten als Beispiel für die Ausführung von AWS CLI v2 unter Alpine Linux verwenden:
Das bereitgestellte Dockerfile/Skript funktioniert, zeigt jedoch diesen Fehler an, der die Funktion nicht zu verhindern scheint:
aws/install: line 78: /aws/dist/aws: not found
Seltsamerweise wird dieser Fehler vermieden, wenn apk add mandoc
kurz vor aws/install
wird, und das Löschen dieses Pakets nach der Installation hat keine negativen Auswirkungen. Zufällige andere Pakete scheinen diese Schutzwirkung nicht zu haben.
Irgendwelche Gedanken?
PS apk add less
ist erforderlich, damit aws help
korrekt funktioniert (es wird sich sonst über fehlendes Paket groff
beschweren).
Hilfreichster Kommentar
Der Grund dafür, dass das adoptopenjdk-Image funktioniert, ist, dass es die fehlenden glibc-Bibliotheken enthält. Alphine linux basiert auf 'musl glibc', einer leichtgewichtigen Alternative zu einer ausgewachsenen glibc. Die aws cli v2-Binärdateien funktionieren nicht mit musl, sie benötigen ein paar weitere Bibliotheken, um zu funktionieren.
Anstatt das Java-Image zu verwenden, können Sie auch das Dockerfile unten als Beispiel für die Ausführung von AWS CLI v2 unter Alpine Linux verwenden:
Das Obige lädt die glibc-Bibliotheken herunter, lädt AWS CLI v2 herunter und installiert sie und entfernt einige Dinge, die wir wahrscheinlich nicht benötigen, wie z. B. die automatische Vervollständigung. Das resultierende Bild ist etwa 100 MB groß