如何在库/节点Docker镜像中使用pip安装awscli

Jer*_*oen 10 python pip amazon-web-services docker

我正在尝试awscli使用pip(根据亚马逊的建议)在自定义Docker镜像中安装FROM library/node:6.11.2.这是一个复制品:

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"]
Run Code Online (Sandbox Code Playgroud)

但是,通过以上我遇见:

no such option: --no-cache-dir
Run Code Online (Sandbox Code Playgroud)

大概是因为我有不正确的Python版本和/或Pip?

我正在以类似的方式安装Python,Pip和awscli,FROM maven:3.5.0-jdk-8并且它工作得很好.我不确定这两个图像之间的相关差异是什么.

从我的Dockerfile中删除所述选项对我也没什么好处,因为那时我遇到了大量不同的错误,这里有一段摘录:

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 ###
Run Code Online (Sandbox Code Playgroud)

底线:如何awsclilibrary/node:6.x基础图像中正确安装?

Jer*_*oen 19

python-dev根据这个其他答案添加,但是会抛出惊人数量的编译器警告(错误?),所以我选择了@ SergeyKoralev的答案,需要在它工作之前进行一些调整.

以下是我需要做出的改变:

  1. 更改为python3pip3无处不在.
  2. 添加语句以升级pip自身.
  3. awscli在单独的RUN命令中分离安装.

这是一个完整的摄制是似乎工作:

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"]
Run Code Online (Sandbox Code Playgroud)

如果在aws安装RUN之前添加shell命令并在升级pip之后刷新内容,则可以将安装保留在同一层中.不知道怎么样.

  • 无论谁现在使用这个答案,请记住 pip3 将不起作用。请改用“python3 -m pip --no-cache-dir install --upgrade awscli”。请参阅:/sf/answers/3488572741/ (2认同)

Dee*_*pak 7

所有答案都是关于 aws-cli 版本 1,如果您想要版本 2,请尝试以下操作

FROM node:lts-stretch-slim

RUN apt-get update && \
    apt-get install -y \
        unzip \
        curl \
    && apt-get clean \
    && curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && ./aws/install \
    && rm -rf \
        awscliv2.zip \
    && apt-get -y purge curl \
    && apt-get -y purge unzip 

CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)


tay*_*fun 5

正如您所说的那样,pip在您使用的 docker 镜像上安装是较旧的,不支持--no-cache-dir. 您可以尝试更新它,或者您也可以解决第二个问题,即缺少 python 源头文件。这可以通过安装python-dev包来解决。只需将其添加到 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"]
Run Code Online (Sandbox Code Playgroud)

然后你可以运行aws它应该在你的路径上。


Ser*_*lev 5

您的映像基于 Debian Jessie,因此您正在安装 Python 2.7。尝试使用Python 3.x:

apt-get install -y python3-pip
pip3 install awscli
Run Code Online (Sandbox Code Playgroud)