我要求在容器构建期间从AWS S3下载文件,但是我没有向构建过程提供AWS凭证但没有在Dockerfile中实际对其进行硬编码的尝试。我收到错误消息:
docker致命错误:无法找到凭据
尽管先前已执行:
aws configure
此外,我不能为此目的使用--build-arg。
我的问题:是否可以在构建时拥有这些凭据而无需在Dockerfile中对其进行硬编码?如果可以,怎么办?
感谢您的关注。
答案 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
期间创建的所有图层的方法。