传入variables或者回答Dockerfile

这似乎是一个经常被问到的问题。 我想再问一遍,看看是否有人提出了答案,或者看看有人能否提出其他build议。

我们有很多计算机和运行服务,更新它们通常是一件很头痛的事情。 Docker来了 我们想自动化这个过程。 Docker可以很好地工作,但是我想自动化构build,这样我们团队中的任何人都可以做到这一点。

部分过程涉及克隆一些git存储库。

我可以做的一件事是使用shell脚本在本地克隆仓库,然后将它们复制到镜像中,但由于有一个dockerfile可以自动执行,所以将方向放在那里似乎很自然。

这不是一个问题,除了提供git凭证。

目前我正在复制我的id_rsa在构build过程中。 虽然是复制它,从回购拉,然后删除我的凭据。 这应该工作正常,除了Dockerfile不接受用户input。

当我去添加我的SSH密钥在dockerfile,它希望我的密钥密码…泊坞窗只是胡扯了,因为它不能采取用户input。

我如何解决这个问题,并使这个过程自动化?

这是一个来自dockerfile的示例。

FROM ubuntu:14.04 MAINTAINER Senica Gonzalez <senica@gmail.com> RUN apt-get -y update RUN apt-get -y upgrade RUN apt-get -y install git-core RUN apt-get -y install vagrant RUN mkdir /home/.ssh COPY id_rsa /home/.ssh/id_rsa RUN eval "$(ssh-agent -s)"; ssh-add /home/.ssh/id_rsa; ssh-add -l 

一种方法可能是在你正在做docker build的机器上执行git clone 。 然后克隆的源文件可以COPY到容器 。

这样可以保持本地计算机上的所有git密钥处理,而且不必担心将ssh密钥包含在Docker映像中。

您不想添加和删除您的密钥。 每一个命令都会创build一个图层,它存在于图像历史logging中,即使您从最终结果中删除了标识,它也会出现在历史logging中(认为它是将您的标识提交给github,然后删除它并推送删除) 。

最简单的情况是使用一个新的专用(和共享)密钥,可以读取存储库。 这个键不应该有一个关键短语,所以不需要交互式input。

如果您使用github,请查看关于部署密钥的文档 (即使您不这样做,也可能会鼓舞人心)。

这就是说,从Dockerfile中克隆不会是我的select。 我会使用每个项目的Dockerfile或类似的东西,以便克隆发生之前和独立的构build。