传入变量或回答Dockerfile

时间:2014-07-16 23:26:37

标签: docker boot2docker

这似乎是一个经常被问到的问题。我想再问一遍,看看是否有人提出了答案,或者是否有人可以提出别的建议。

我们有许多计算机和运行服务,更新它们通常很头疼。来了Docker。我们希望自动完成此过程。 Docker可以很好地完成这项工作,但我希望自动化构建,这样我们团队中的任何人都可以做到这一点。

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

我能做的一件事就是使用shell脚本在本地克隆repos,然后将它们复制到图像上,但由于有一个dockerfile可以自动化东西,所以将方向放在那里似乎很自然。

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

目前我在构建过程中复制了我的id_rsa。虽然是复制它,从回购中提取,然后删除我的凭据。除了Dockerfile不接受用户输入外,这应该可以正常工作。

当我在dockerfile中添加我的ssh密钥时,它需要我的密钥密码... docker只是疯了,因为它无法接受用户输入。

如何解决这个问题并使流程自动化?

以下是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

2 个答案:

答案 0 :(得分:4)

您不想添加和删除密钥。每个命令都会创建一个图层,该图层存在于图像历史记录中,即使您从最终结果中删除了该ID,它也会出现在历史记录中(将其视为将您的id提交给github然后删除它并推送删除)

最简单的方案是使用对存储库具有读访问权限的新专用(和共享)密钥。此密钥不应包含关键短语,因此不需要交互式输入。

如果您使用github,请查看documentation on Deploy Keys(即使您不这样做,也可能会鼓舞人心。)

话虽如此,从Dockerfile中克隆不是我的选择。我在每个项目或类似的项目中使用Dockerfile,以便克隆在构建之前和独立于构建之前发生。

答案 1 :(得分:2)

一种方法可能是在您正在执行git clone的计算机上执行docker build。然后克隆的源文件可以是COPYed to the container

保留本地计算机上的所有git密钥处理,您不必担心Docker映像中包含您的ssh密钥。