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
Erreurs avec :
/ # ./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
J'ai essayé de déboguer le problème et je n'ai pas pu comprendre pourquoi il échoue. Il me semble que le script d'installation est juste un peu floconneux. J'ai également essayé d'ajouter l'étiquette v2.
Les binaires que nous publions ne fonctionneront pas sur les images docker basées sur alpine
car nous les compilons avec la glibc. Le sh: aws2: not found
est ce qui se passe lorsque vous essayez d'exécuter ce binaire. Si vous l'essayez sur une image comme ubuntu:latest
le programme d'installation fonctionnera.
De plus, je ne pense pas que nous publierions un jour un binaire compatible alpin comme nous le faisons pour notre binaire Linux général. Je pense que nous serions plus enclins à publier une image docker fournie avec notre binaire construit sur alpine.
Merci pour votre réponse. Est-il possible de documenter cela ici https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html sous "Prérequis pour Linux", ou de rendre l'erreur plus conviviale dans le domaine alpin cas d'image?
Nous veillerons à ce que cela soit mis à jour dans le guide de l'utilisateur. J'aime aussi l'idée de créer un message d'erreur plus convivial pour ce cas.
@joguSD déception , alpine est la norme pour les images docker. Surtout avec les systèmes build/ci voulant automatiser et ne voulant pas télécharger continuellement de très grandes images docker.
Peut utiliser une image docker alpine officielle dans une construction en plusieurs étapes pour copier le binaire dans une autre image docker.
@chadgrant - pouvez-vous donner un exemple s'il vous plaît de votre fichier docker multi-étapes ?
@BarakBD-Globality Je n'en ai pas, mais si l'image aws-alpine est créée, vous pouvez simplement faire :
FROM aws_alpine_image:latest as aws
FROM alpine:latest
COPY --from=aws /usr/local/bin/binary /usr/local/bin/binary
Dommage qu'ils ne supportent pas l'alpin. C'est une image standard.
De plus, je ne pense pas que nous publierions un jour un binaire compatible alpin comme nous le faisons pour notre binaire Linux général. Je pense que nous serions plus enclins à publier une image docker fournie avec notre binaire construit sur alpine.
@joguSD y a-t-il eu une discussion ou une motion à ce sujet ? Cela semble être un gros problème compte tenu de la prévalence de l'alpin. Les gens comme moi utilisent aws
dans leur cicd et autres automatisations, donc si ce n'est pas disponible pour les images alpines, l'utilisation de la version 2 n'est même pas une option sans un travail important ! Merci.
ne peut pas non plus installer dans busybox
Fait intéressant, si vous l'utilisez comme image de base, la CLI AWS s'installera et fonctionnera correctement.
DE adoptopenjdk/openjdk11:alpine
J'ai pu le faire en utilisant le Dockerfile suivant
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
La raison pour laquelle l'image adoptopenjdk fonctionne est qu'elle inclut les bibliothèques glibc manquantes. Alphine linux est basé sur 'musl glibc', une alternative légère à une glibc complète. Les binaires aws cli v2 ne fonctionnent pas avec musl, ils ont besoin de quelques bibliothèques supplémentaires pour fonctionner.
Au lieu d'utiliser l'image Java, vous pouvez également utiliser le fichier Docker ci-dessous comme exemple d'exécution de l'AWS CLI v2 sur Alpine Linux :
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/*
Ce qui précède téléchargera les bibliothèques glibc, téléchargera et installera l'AWS CLI v2 et supprimera certains éléments dont nous n'avons probablement pas besoin, tels que la saisie semi-automatique. L'image résultante a une taille d'environ 100 Mo
Alors, quel est le chemin le plus court pour obtenir un aws ecr get-login-password … | docker login …
dans un conteneur Docker en cours d'exécution ? (ce qui implique : docker:dind
) ?
J'aimerais éviter de créer ma propre image docker:stable
avec le support docker:dind
. Au moins, je pourrais grâce à la solution https://github.com/aws/aws-cli/issues/4685#issuecomment -615872019. Merci pour ça!
@bentolor Étant donné que docker:dind
utilise également alpine, je suppose que tout ce que vous avez à faire est de changer la première ligne du Dockerfile mentionné ci-dessus. Au lieu de FROM alpine:3.11
vous devriez utiliser FROM docker:dind
. Cela signifie que vous construisez votre propre image, cependant...
merci @blagerweij fonctionne très bien
Merci également @blagerweij : j'ai saisi l'ortie et construit une image docker publique et personnalisée en copiant/collant votre solution : https://hub.docker.com/r/bentolor/docker-dind-awscli
@bentolor J'ai remarqué dans votre dépôt que votre Dockerfile utilise FROM docker:stable
au lieu de FROM docker:dind
. Je pensais que le but était de créer une image pour Docker dans Docker avec le support AWS ?
@blagerweij Voir l'image ci-dessous de l' image officielle de Docker pour illustration.
L'utilisation typique est :
docker:dind
puisdocker:stable
distincte qui est liée au conteneur docker:dind
démarrédocker
à l'intérieur du deuxième conteneur qui redirige les commandes via une connexion socket vers le démon docker s'exécutant dans le premier conteneur docker:dind
.Par conséquent : s'il est vrai que l'instance docker:dind
exécute finalement vos commandes Docker, votre interface CLI réside en fait dans une instance docker:stable
. Et c'est l'endroit où l'on doit se connecter à AWS ;-)
Au moins, c'est le modèle d'utilisation que je connais (c'est-à-dire sur l'utilisation de Gitlab CI pour créer des images docker:dind
?
On peut utiliser l'image alpine avec la glibc de https://hub.docker.com/r/frolvlad/alpine-glibc/
et installez aws cli en suivant les étapes de la documentation aws. A travaillé pour moi.
@blagerweij J'ai utilisé votre script avec le docker dans l'image docker. aws cli fonctionne bien. Je viens d'avoir une erreur dans la construction :
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
@amiram Oui, je reçois également ce message, c'est un avertissement que vous pouvez simplement ignorer : il attend un lien symbolique, mais le fichier présent est un fichier normal. Voir https://github.com/envoyproxy/envoy/issues/9078#issuecomment -576837432
Quelqu'un pourrait-il renommer ce problème en quelque chose comme : « Distribute binaires pour alpine / musl » ?
@joguSD @jordanst3wart
Ouais, je suis content de "Distribute binaires pour alpine / musl libc". Faites-moi savoir si vous avez des problèmes
Je n'ai besoin que d'aws s3 cp pour un projet passion, donc je viens d'installer awscli V1 avec pip :
FROM alpine:3.12
RUN pip install awscli
RUN aws s3 ..
La raison pour laquelle l'image adoptopenjdk fonctionne est qu'elle inclut les bibliothèques glibc manquantes. Alphine linux est basé sur 'musl glibc', une alternative légère à une glibc complète. Les binaires aws cli v2 ne fonctionnent pas avec musl, ils ont besoin de quelques bibliothèques supplémentaires pour fonctionner.
Au lieu d'utiliser l'image Java, vous pouvez également utiliser le fichier Docker ci-dessous comme exemple d'exécution de l'AWS CLI v2 sur Alpine Linux :
couper
Ce qui précède téléchargera les bibliothèques glibc, téléchargera et installera l'AWS CLI v2 et supprimera certains éléments dont nous n'avons probablement pas besoin, tels que la saisie semi-automatique. L'image résultante a une taille d'environ 100 Mo
cet ajustement récupérera automatiquement la dernière version si vous ne souhaitez pas coder en dur la version de la 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/*
vous pouvez également utiliser le Dockerfile ci-dessous comme exemple d'exécution d'AWS CLI v2 sur Alpine Linux :
Le Dockerfile/script fourni fonctionne mais affiche cette erreur, qui ne semble pas l'empêcher de fonctionner :
aws/install: line 78: /aws/dist/aws: not found
Étrangement, exécuter apk add mandoc
juste avant aws/install
évite d'afficher cette erreur, et la suppression de ce paquet après l'installation n'a aucun effet néfaste. D'autres emballages aléatoires ne semblent pas avoir cet effet protecteur.
Des pensées?
PS apk add less
est requis pour que aws help
fonctionne correctement (il se plaindra du paquet manquant groff
sinon).
Commentaire le plus utile
La raison pour laquelle l'image adoptopenjdk fonctionne est qu'elle inclut les bibliothèques glibc manquantes. Alphine linux est basé sur 'musl glibc', une alternative légère à une glibc complète. Les binaires aws cli v2 ne fonctionnent pas avec musl, ils ont besoin de quelques bibliothèques supplémentaires pour fonctionner.
Au lieu d'utiliser l'image Java, vous pouvez également utiliser le fichier Docker ci-dessous comme exemple d'exécution de l'AWS CLI v2 sur Alpine Linux :
Ce qui précède téléchargera les bibliothèques glibc, téléchargera et installera l'AWS CLI v2 et supprimera certains éléments dont nous n'avons probablement pas besoin, tels que la saisie semi-automatique. L'image résultante a une taille d'environ 100 Mo