在Docker中使用构建时参数的安全方法

时间:2017-07-30 22:13:02

标签: docker dockerfile

我有一个构建时间参数,我想用它来构建我的Docker文件;由于该参数本质上是机密的(私人仓库的github密钥),我不希望它最终出现在码头图像中。这个引用来自关于构建时参数的官方docker文档。

  

警告:建议不要使用构建时变量进行传递   秘密,如github密钥,用户凭据等。构建时变量   具有泊坞窗历史记录的图像的任何用户都可以看到这些值   命令。

有谁知道推荐的方法是什么?

3 个答案:

答案 0 :(得分:12)

使用docker 18.09+,将是: docker build --secret id=mysecret,src=/secret/file (使用buildkit)。

请参见PR 1288,已宣布in this tweet
--secret现在受到API version 1.39的保护。

示例:

printf "hello secret" > ./mysecret.txt

export DOCKER_BUILDKIT=1

docker build --no-cache --progress=plain --secret id=mysecret,src=$(pwd)/mysecret.txt -f - . <<EOF
# syntax = tonistiigi/dockerfile:secrets20180808
FROM busybox
RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret
RUN --mount=type=secret,id=mysecret,dst=/foobar cat /foobar
EOF

答案 1 :(得分:1)

我依赖Dockerfile的上下文。基本上,有一些其他东西(即Jenkins,sub-repos)被你的Github密钥信任,将所有必要的回购下拉到相对位置,为你的Dockerfile提供所需的上下文。 Docker构建过程本身的任何内容都不应该是管理机密。

如果您更详细地说明您的用例,我可以更具体一点。如果它只是你需要的一个repo,你可以将Dockerfile放在该repo的根目录中,并依赖其他东西来提供克隆repo的凭据。

答案 2 :(得分:-1)

这是docker secret

的要点

参见例如

https://blog.docker.com/2017/02/docker-secrets-management/