Reputation: 12605
I have a dockerfile that looks like this:
FROM python:2.7
RUN pip install awscli --upgrade --user
Once the docker image is built from this dockerfile, I run it. But when I get into the container and try to run the AWS CLI, it can't find it, because it is not in the PATH environment variable:
$ 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
What is the best/easiest/least-hacky way to make sure that the AWSCLI is usable by being included in the PATH variable? Can this be done from inside the dockerfile itself?
Upvotes: 7
Views: 26809
Reputation: 10312
In case you just need aws
on your CI server:
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"]
Build and tag as aws
:
docker build -t aws .
Which can be used in this way:
docker run --rm -v /root/aws-cli/.aws:/root/.aws -ti aws ecr get-login --no-include-email --region us-west-2
Or:
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
Upvotes: 5
Reputation: 70175
You have two options here.
The first is to explicitly put the root
user's local bin on the PATH
with something like
ENV PATH=/root/.local/bin:$PATH
The second is to drop the --user
argument on your pip install
. By default, pip
should write to /usr/local/bin
which will be on your PATH
already
Upvotes: 9