Linux docker-无法在容器中找到aws凭据,尽管它们存在

Linux docker-无法在容器中找到aws凭据,尽管它们存在,linux,bash,amazon-web-services,docker,Linux,Bash,Amazon Web Services,Docker,在mac上运行以下docker命令有效,在linux上运行ubuntu无法找到aws cli凭据。它返回以下消息:找不到凭据 已完成1部分,包括。。。剩余文件 该命令运行一个映像并装载一个数据卷,然后从和s3 bucket复制一个文件,并在docker容器中启动bash shell sudo docker run-it--rm-v~/.aws:/root/.aws username/docker image sh-c'aws s3 cp s3://bucketname/filename.tar.

mac
上运行以下docker命令有效,在
linux
上运行
ubuntu
无法找到
aws cli
凭据。它返回以下消息:
找不到凭据
已完成1部分,包括。。。剩余文件

该命令运行一个映像并装载一个数据卷,然后从和s3 bucket复制一个文件,并在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/

如果你跑步,你会看到什么

ls -l ~/.aws/config

在docker实例中?

有几件事情可能是错误的。第一,如前所述,您应该检查~/.aws/config文件是否已相应设置。如果没有,您可以按照进行设置。完成此操作后,您可以使用
docker run
上的
-v
标志映射
~/.aws
文件夹


如果您的
~/.aws
文件夹映射正确,请确保检查~/.aws下文件的权限,以便尝试访问这些文件的任何进程都能够安全地访问它们。如果您是作为用户进程运行的,只需运行
chmod 444~/.aws/*
就可以了。这将授予文件的完全读取权限。当然,如果您想要写入权限,您可以添加任何其他需要的修改器。只需确保相应用户和/或组的读取八进制已翻转。

您可以使用环境变量,而不是将~/.aws/凭据和配置文件复制到aws cli的容器中


码头工人赛跑\
-e AWS\u访问\u密钥\u ID=AXXXXXXXXXXX\
-e AWS_SECRET_ACCESS_KEY=Wxxxxxxxxxxy\
-e AWS_默认_地区=us-west-2\


参考:

$HOME/.aws/
安装到容器中应该可以工作。请确保以只读方式安装它


同样值得一提的是,如果在
~/.aws/config
中有多个概要文件,则还必须提供
aws\u PROFILE=somethingssomething
环境变量。例如,通过
docker run-E AWS_PROFILE=xxx…
否则您将收到相同的错误消息(无法找到凭据)。

我遇到的问题是我以root用户身份运行docker。以root用户身份运行时,无法在
~/.aws/credentials
找到我的凭据,即使它们是有效的


在Ubuntu上运行Docker而不使用root的说明如下:

-rw------1 1000 staff 29 May 25 14:04/root/.aws/config
如果执行
cat~/.aws/config
是否显示了您的访问id和密码?老实说,我没想到会这样。这个错误说明了问题所在,它找不到通常位于~/.aws/config的配置文件。我怀疑问题在于,您假设主目录是/root/,而不是在每个实例中都是这样。另外,如果这是您的问题,也许您应该设置环境变量
AWS\u CONFIG\u FILE=/root/.AWS/CONFIG
,以确保docker确切知道在哪里查找OK,这里缺少一个重要的env变量:
AWS\u SDK\u LOAD\u CONFIG=1
我遇到了相同的问题
~/.AWS/credentials
未加载。我必须使用
/root/.aws/credentials
。谢谢,谢谢。它正在工作。