我想知道在docker构建期间是否有关于如何将凭证注入Docker容器的最佳实践.
在我的Dockerfile中,我需要获取需要基本身份验证的资源Web服务器,并且我正在考虑如何在不对其进行硬编码的情况下将凭据带入容器的正确方法.
怎么样的.netrc文件并使用它与curl –netrc …?但安全呢?我不喜欢将凭据与Dockerfile一起保存在源存储库中.
有没有例如使用参数或环境变量注入凭证的方法?
有任何想法吗?
最佳答案
一些新的Docker功能使其比过去更加优雅和安全.新的multi-phase builds让我们用一个Dockerfile实现构建器模式.此方法将我们的凭据放入临时“构建器”容器中,然后该容器构建一个不包含任何秘密的新容器.
您可以选择如何将凭据获取到构建器容器中.例如:
>使用环境变量:ENV creds = user:pass and curl https://$creds@host.com
>使用build-arg传递凭据
>将ssh密钥复制到容器中:COPY key /root/.ssh/id_rsa
>使用Credential Helpers使用您自己的操作系统自己的安全凭证
Multi-phase具有多个FROM的Dockerfile:
## Builder
FROM alpine:latest as builder
#
# -- insert credentials here using a method above --
#
RUN apk add --no-cache git
RUN git clone https://github.com/some/website.git /html
## Webserver without credentials
FROM Nginx:stable
COPY --from=builder /html /usr/share/Nginx/html