如何在构建期间将凭据带入Docker容器

时间:2016-05-31 18:21:33

标签: docker dockerfile docker-build

我想知道在docker build期间是否有关于如何将凭据注入Docker容器的最佳实践。 在我的Dockerfile中,我需要获取需要基本身份验证的资源Web服务器,并且我正在思考如何在不对其进行硬编码的情况下将凭据放入容器的正确方法。

.netrc文件如何与curl --netrc ...一起使用?但安全呢?我不喜欢将凭据与我的Dockerfile一起保存在源存储库中。

是否有任何方法可以使用参数或环境变量注入凭据?

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

一些新的Docker功能使其比过去更加优雅和安全。新的diagnostics让我们用一个Dockerfile实现构建器模式。此方法将我们的凭据放入临时“构建器”容器中,然后该容器构建一个不包含任何秘密的新容器。

您可以选择如何将凭据获取到构建器容器中。例如:

  • 使用环境变量:ENV creds=user:passcurl https://$creds@host.com
  • 使用multi-phase builds传递凭据
  • 将ssh密钥复制到容器中:COPY key /root/.ssh/id_rsa
  • 使用build-arg
  • 使用您自己的操作系统自己的安全凭据
带有多个FROM的

Credential Helpers 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