Dockerfile中的AWS凭证

时间:2018-08-13 14:27:35

标签: amazon-web-services docker amazon-s3

我要求在容器构建期间从AWS S3下载文件,但是我没有向构建过程提供AWS凭证但没有在Dockerfile中实际对其进行硬编码的尝试。我收到错误消息:

  

docker致命错误:无法找到凭据

尽管先前已执行:

  

aws configure

此外,我不能为此目的使用--build-arg。

我的问题:是否可以在构建时拥有这些凭据而无需在Dockerfile中对其进行硬编码?如果可以,怎么办?

感谢您的关注。

2 个答案:

答案 0 :(得分:2)

使用--build-arg标志是正确的方法,但是必须使用ARG指令,而不是ENV指令在Dockerfile中进行指定。

这是我用于AWS凭证的示例Dockerfile。它以aws凭证作为构建参数,包括AWS_REGION构建参数的默认参数。然后,它执行基本的aws操作,在这种情况下,登录到ecr。

FROM <base-image>:latest # an image I have that has `aws` installed

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_REGION=us-west-2

RUN aws ecr get-login --no-include-email | bash

CMD ["npm", "start"]

然后使用以下命令构建映像:

docker build -t testing --build-arg AWS_ACCESS_KEY_ID=<Your ID Here> \
    --build-arg AWS_SECRET_ACCESS_KEY=<Your Key Here> .

希望这会有所帮助。

答案 1 :(得分:1)

可以对 docker history 隐藏值。为了实现这一点,您必须使用 multistage-build。这将使您的历史记录仅从第二个 FROM 开始可见。

基于 Jack 的片段示例:

FROM <base-image>:latest AS first

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_REGION=us-west-2

[do something]

FROM <base-image>:latest

COPY --from=first /dir/file_from_first /dir/file

这是一种隐藏在第一个 FROM 期间创建的所有图层的方法。