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

mdfafbf1  于 2022-12-03  发布在  Docker
关注(0)|答案(5)|浏览(213)

我正在尝试使用pip(根据Amazon的建议)在FROM library/node:6.11.2自带的自定义Docker映像中安装awscli

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"]

不过,有了上面的我很满足:

no such option: --no-cache-dir

大概是因为我得到了不正确的Python和/或Pip版本?
我在FROM maven:3.5.0-jdk-8中以类似的方式安装Python、Pip和awscli,它运行得很好。我不确定这两个映像之间的 * 相关 * 差异是什么。
从我的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 ###

底线:如何在基于library/node:6.x的映像中正确安装awscli

eimct9ow

eimct9ow1#

按照this other answer添加python-dev是可行的,但是会抛出数量惊人的编译器警告(错误?),所以我使用了@SergeyKoralev的答案的变体,它需要一些调整才能生效。
以下是我需要做的更改:
1.在所有位置更改为python3pip3
1.添加语句以升级pip本身。
1.在单独的RUN命令中单独安装awscli
下面是一个完整的复制,* 确实 * 似乎工作:

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"]

如果你在安装之前添加一个shell命令,在升级pip之后刷新内容,你也可以将aws安装保持在同一个RUN层。

fnvucqvd

fnvucqvd2#

所有答案都是关于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"]
jslywgbw

jslywgbw3#

正如你所说的那样,你正在使用的docker镜像上安装的pip是一个不支持--no-cache-dir的旧版本。你可以尝试更新它,或者你也可以修复第二个问题,那就是缺少python源头文件。这个问题可以通过安装python-dev包来修复。只需将它添加到Docker文件中安装的包列表中:

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"]

然后可以运行路径上的aws

fae0ux8s

fae0ux8s4#

您的映像是基于Debian杰西的,因此您安装的是Python 2.7。请尝试使用Python 3.x:

apt-get install -y python3-pip
pip3 install awscli
vuv7lop3

vuv7lop35#

使用以下命令在Docker容器中安装AWS CLI:

apt upgrade -y;apt update;apt install python3 python3-pip python3-setuptools -y; python3 -m pip --no-cache-dir install --upgrade awscli

要检查假定角色或AWS身份,请运行以下命令:

aws sts get-caller-identity

相关问题