J'essaie d'installer awscli
en utilisant pip
(selon les recommandations d'Amazon) dans une image Docker personnalisée qui vient FROM library/node:6.11.2
. Voici une repro:
FROM library/node:6.11.2
RUN apt-get update && \
apt-get install -y \
python \
python-pip \
python-setuptools \
groff \
less \
&& pip --no-cache-dir install --upgrade awscli \
&& apt-get clean
CMD ["/bin/bash"]
Cependant, avec ce qui précède, je rencontre:
no such option: --no-cache-dir
Vraisemblablement parce que j'ai des versions incorrectes de Python et/ou Pip?
J'installe Python, Pip et awscli de manière similaire avec FROM maven:3.5.0-jdk-8
et là ça marche très bien. Je ne sais pas quelles sont les différences pertinentes entre les deux images.
Supprimer cette option de mon Dockerfile ne me fait pas beaucoup de bien non plus, car alors je rencontre un tas d'erreurs différentes, un extrait ici:
Installing collected packages: awscli, PyYAML, docutils, rsa, colorama, botocore, s3transfer, pyasn1, jmespath, python-dateutil, futures, six
Running setup.py install for PyYAML
checking if libyaml is compilable
### ABBREVIATED ###
ext/_yaml.c:4:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
### ABBREVIATED ###
Conclusion: comment installer correctement awscli
dans library/node:6.x
images basées?
Ajouter python-dev
selon cette autre réponse fonctionne, mais lance un nombre alarmant d'avertissements du compilateur (erreurs?), donc je suis allé avec une variation de @ réponse de SergeyKoralev , qui avait besoin de quelques peaufiner avant que cela fonctionne.
Voici les changements dont j'avais besoin pour que cela fonctionne:
python3
et pip3
partout.pip
lui-même.awscli
dans une commande RUN
distincte.Voici une repro complète qui semble fonctionner:
FROM library/node:6.11.2
RUN apt-get update && \
apt-get install -y \
python3 \
python3-pip \
python3-setuptools \
groff \
less \
&& pip3 install --upgrade pip \
&& apt-get clean
RUN pip3 --no-cache-dir install --upgrade awscli
CMD ["/bin/bash"]
Vous pouvez probablement également conserver l'installation de aws
dans la même couche RUN
si vous ajoutez une commande Shell avant l'installation qui actualise les choses après la mise à niveau de pip. Je ne sais pas comment.
Comme vous l'avez correctement indiqué, pip
l'installation sur l'image de docker que vous utilisez est une ancienne qui ne prend pas en charge --no-cache-dir
. Vous pouvez essayer de mettre à jour cela ou vous pouvez également résoudre le deuxième problème qui concerne les en-têtes source manquants python. Cela peut être résolu en installant python-dev
paquet. Ajoutez simplement cela à la liste des packages installés dans le Dockerfile:
FROM library/node:6.11.2
RUN apt-get update && \
apt-get install -y \
python \
python-dev \
python-pip \
python-setuptools \
groff \
less \
&& pip install --upgrade awscli \
&& apt-get clean
CMD ["/bin/bash"]
Vous pouvez ensuite exécuter aws
qui devrait se trouver sur votre chemin.
Votre image est basée sur Debian Jessie, vous installez donc Python 2.7. Essayez d'utiliser Python 3.x:
apt-get install -y python3-pip
pip3 install awscli