如何基于镜像“ python:2.7”在Docker容器中安装AWS CLI

Saq*_*Ali 5 docker aws-cli

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

FROM python:2.7
RUN pip install awscli --upgrade --user
Run Code Online (Sandbox Code Playgroud)

从此dockerfile构建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
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*ile 6

您在这里有两个选择。

首先是明确提出了root用户的本地斌对PATH喜欢的东西

ENV PATH=/root/.local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

第二种是将--user论点放在您的上pip install。默认情况下,pip应该写入/usr/local/bin哪个将在您PATH已经


Ole*_*kin 5

如果您只需要aws在 CI 服务器上:

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

构建并标记为aws

docker build -t aws .
Run Code Online (Sandbox Code Playgroud)

可以这样使用:

docker run --rm -v /root/aws-cli/.aws:/root/.aws -ti aws ecr get-login --no-include-email --region us-west-2
Run Code Online (Sandbox Code Playgroud)

或者:

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