docker - 尽管存在,但在容器中找不到 aws 凭据

hyp*_*ack 11 linux bash amazon-web-services docker

macworks 和 on 上运行以下 docker 命令linux,runningubuntu找不到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/
Run Code Online (Sandbox Code Playgroud)

Bas*_*hur 23

安装$HOME/.aws/到容器中应该可以。确保将其安装为只读。

\n

还值得一提的是,如果您的配置文件中有多个配置文件~/.aws/config,则还必须提供AWS_PROFILE=somethingsomething环境变量。例如docker run -e AWS_PROFILE=xxx ...,否则您将收到相同的错误消息(无法找到凭据)。

\n

更新:添加了 mount 命令的示例

\n
docker run -v ~/.aws:/root/.aws \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n


Ton*_*Lee 8

您可以使用环境变量,而不是将 ~/.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 文档


Hen*_*itt 8

在这种情况下对我有用的唯一解决方案是:

volumes:
  - ${USERPROFILE}/.aws:/root/.aws:ro
Run Code Online (Sandbox Code Playgroud)


dev*_*bar 7

如果你跑,你会看到什么

ls -l ~/.aws/config
Run Code Online (Sandbox Code Playgroud)

在您的 docker 实例中?

  • 另外,如果这是您的问题,也许您应该设置环境变量 `AWS_CONFIG_FILE=/root/.aws/config` 以确保您的 docker 确切知道在哪里查看 (2认同)