如何基于image在docker容器中安装AWS CLI;python:2.7“;

如何基于image在docker容器中安装AWS CLI;python:2.7“;,docker,aws-cli,Docker,Aws Cli,我有一个dockerfile,看起来像这样: FROM python:2.7 RUN pip install awscli --upgrade --user 从这个docker文件构建docker映像后,我将运行它。但当我进入容器并尝试运行AWS CLI时,它找不到它,因为它不在PATH环境变量中: $ docker exec -ti ec4934370e37 /bin/bash root@ec4934370e37:~# aws bash: aws: command not found r

我有一个dockerfile,看起来像这样:

FROM python:2.7
RUN pip install awscli --upgrade --user
从这个docker文件构建docker映像后,我将运行它。但当我进入容器并尝试运行AWS CLI时,它找不到它,因为它不在PATH环境变量中:

$ docker exec -ti ec4934370e37 /bin/bash

root@ec4934370e37:~# aws
bash: aws: command not found

root@ec4934370e37:/# find / -name aws
/root/.local/bin/aws

root@ec4934370e37:/# /root/.local/bin/aws --version
aws-cli/1.15.81 Python/2.7.15 Linux/4.9.87-linuxkit-aufs botocore/1.10.80

root@ec4934370e37:/# env | grep PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

通过将AWSCLI包含在PATH变量中,确保AWSCLI可用的最佳/最简单/最简单的方法是什么?这可以从dockerfile本身内部完成吗?

这里有两个选项

第一种方法是显式地将
root
用户的本地bin放在
路径上

ENV PATH=/root/.local/bin:$PATH

第二种方法是在
pip安装
中删除
--user
参数。默认情况下,
pip
应写入
/usr/local/bin
,如果您只需要在CI服务器上安装
aws
,它将位于您的
路径上

FROM python:alpine

ARG CLI_VERSION=1.16.310

RUN pip install --no-cache-dir awscli==$CLI_VERSION && \
    mkdir /root/.aws

VOLUME /root/.aws/

ENTRYPOINT ["/usr/local/bin/aws"]
生成并标记为aws

docker build -t aws .
可通过以下方式使用:

docker run --rm -v /root/aws-cli/.aws:/root/.aws -ti aws ecr get-login --no-include-email --region us-west-2
或:


ENV PATH=/root/.local/bin:$PATH
可能会起作用——不过如果您删除
-user
,它可能会安装到
/usr/local/bin
中,并且已经在
路径上了!是的。删除
--用户
成功!
docker run --rm -e  AWS_ACCESS_KEY_ID=AKIABCDEFGHIJKLMONP -e "AWS_SECRET_ACCESS_KEY=abcdefghijklmnopqrstvwxyz" -ti aws ecr get-login --no-include-email --region us-west-2