我最近一直在尝试使用Docker构建一些服务来解决这个问题,并且一直在唠叨我的一直是将密码放在Dockerfile中.我是一名开发人员,因此在源代码中存储密码感觉就像一拳.这应该是一个问题吗?关于如何在Dockerfiles中处理密码有什么好的约定吗?
我正在尝试从SCM加载Jenkins管道脚本.我必须构建一个docker镜像并将其推送到GCR.在docker镜像中,我需要安装私有git存储库.在这里,我试图从Jenkins输入获取git用户名密码.但我不知道如何在Dockerfile中使用它来拉取git repo.这些是我在SCM中的Jenkinsfile和Dockerfile.有什么建议?
詹金斯文件:
node {
def app
stage('Clone repository') {
checkout scm
def COMMITHASH = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
echo ("Commit hash: "+COMMITHASH.substring(0,7))
}
stage('Build image') {
timeout(time: 600, unit: 'SECONDS') {
gitUser = input(
id: 'gitUser',
message: 'Please enter git credentials :',
parameters: [
[$class: 'TextParameterDefinition', defaultValue: "", description: 'Git user name', name: 'username'],
[$class: 'PasswordParameterDefinition', defaultValue: "", description: 'Git password', name: 'password']
])
}
/* Build docker image */
println('Build image stage');
app = …Run Code Online (Sandbox Code Playgroud) 我尝试将私有 nuget 源添加(覆盖)到我的构建脚本中,以便添加用户/密码 - 并将其置于我的源代码控制之外。到目前为止我尝试过的:
nuget 未被识别为图像内的命令dotnet nuget 没有添加其他源的命令dotnet restoreFROM mcr.microsoft.com/dotnet/core/sdk:2.2
RUN apt-get update && apt-get install -y nuget
RUN nuget source Add -Name "Private Feed" -Source ".." -UserName "UserVAR" -Password "PassVAR"
RUN dotnet restore
Run Code Online (Sandbox Code Playgroud) 我的 Tomcat 容器需要必须受到良好保护的数据,即用于数据库访问的密码以及用于单点登录到其他系统的证书和密钥。
我已经看到一些使用-e或-env-file将秘密数据传递给容器的建议,但这可以通过 docker inspect 发现(-env-file也在docker inspect 中显示文件的所有属性)。
另一种方法是将带有机密的数据容器链接到服务容器,但我不喜欢在我的注册表中包含此数据容器的概念(可供更广泛的人访问)。我知道我可以设置一个私有注册表,但是我需要不同的注册表来进行测试和生产,而且每个可以访问生产注册表的人仍然可以访问秘密数据。
我正在考虑使用包含机密数据的目录设置我的服务器并将机密数据安装到我的容器中。这对于具有不同秘密的测试和生产服务器非常有用。但它创建了容器对我的特定服务器的依赖。
所以我的问题是:您如何处理秘密数据,该问题的最佳解决方案是什么?
我有一个构建时参数,我想用它来构建我的Docker文件; 由于该参数本质上是机密的(私人仓库的github密钥),我不希望它最终出现在码头图像中.这个引用来自关于构建时参数的官方docker文档.
警告:建议不要使用构建时变量来传递github密钥,用户凭据等秘密.使用docker history命令可以使映像的任何用户都可以看到构建时变量值.
有人知道推荐的方法是什么?