在mac
上运行以下docker命令,在linux
上运行ubuntu
无法找到aws cli
凭据。它返回以下消息:Unable to locate credentials
Completed 1 part(s) with ... file(s) remaining
运行映像并安装数据卷然后从s3存储桶复制文件的命令,并在docker容器中启动bash shell。
sudo docker run -it --rm -v ~/.aws:/root/.aws username/docker-image sh -c 'aws s3 cp s3://bucketname/filename.tar.gz /home/emailer && cd /home/emailer && tar zxvf filename.tar.gz && /bin/bash'
我在这里缺少什么?
这是我的Dockerfile
:
FROM ubuntu:latest
#install node and npm
RUN apt-get update && \
apt-get -y install curl && \
curl -sL https://deb.nodesource.com/setup | sudo bash - && \
apt-get -y install python build-essential nodejs
#install and set-up aws-cli
RUN sudo apt-get -y install \
git \
nano \
unzip && \
curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" && \
unzip awscli-bundle.zip
RUN sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
# Provides cached layer for node_modules
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /home/emailer && cp -a /tmp/node_modules /home/emailer/
答案 0 :(得分:3)
如果你跑
,你会怎么看?ls -l ~/.aws/config
你的docker实例中有吗?
答案 1 :(得分:1)
将$HOME/.aws/
装入容器应该可以。确保将其安装为只读。
值得一提的是,如果您的~/.aws/config
中有几个配置文件,则还必须提供AWS_PROFILE=somethingsomething
环境变量。例如。通过docker run -e AWS_PROFILE=xxx ...
,否则您将收到相同的错误消息(无法找到凭据)。
答案 2 :(得分:0)
有些事情可能是错误的。一,如前所述,您应该检查〜/ .aws / config文件是否已相应设置。如果没有,您可以按照this link进行设置。完成后,您可以使用~/.aws
上的-v
标志映射docker run
文件夹。
如果您的~/.aws
文件夹映射正确,请确保检查〜/ .aws下文件的权限,以便无论尝试访问它们的进程都可以安全地访问它们。如果您以用户进程的身份运行,只需运行chmod 444 ~/.aws/*
就可以解决问题。这将赋予该文件完全读取权限。当然,如果需要写权限,则可以添加所需的其他任何修饰符。只需确保已为相应的用户和/或组翻转已读取的八进制数即可。
答案 3 :(得分:0)
我遇到的问题是我以root用户身份运行Docker。以root身份运行时,即使它们有效,也无法在~/.aws/credentials
处找到我的凭据。
在Ubuntu上不带root的情况下运行Docker的方向如下:https://askubuntu.com/a/477554/85384
答案 4 :(得分:-1)
您可以使用环境变量,而不是将〜/ .aws / credentials和配置文件复制到aws-cli的容器中
docker run \
-e AWS_ACCESS_KEY_ID=AXXXXXXXXXXXXE \
-e AWS_SECRET_ACCESS_KEY=wXXXXXXXXXXXXY \
-e AWS_DEFAULT_REGION=us-west-2 \
<img>
参考:AWS CLI Doc