23

我想知道是否有关于如何在docker build. 在我的 Dockerfile 中,我需要获取需要基本身份验证的资源网络服务器,并且我正在考虑如何在不硬编码的情况下将凭据带入容器的正确方法。

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

例如,有什么方法可以使用参数或环境变量注入凭据?

有任何想法吗?

4

1 回答 1

15

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

您可以选择如何将凭据放入构建器容器中。例如:

  • 使用环境变量:ENV creds=user:passcurl https://$creds@host.com
  • 使用build-arg传递凭据
  • 将 ssh 密钥复制到容器中:COPY key /root/.ssh/id_rsa
  • 通过Credential Helpers使用您的操作系统自己的安全凭证

具有多个 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
于 2018-02-15T19:06:37.527 回答