【问题标题】:Pass in variables or answer Dockerfile传入变量或回答 Dockerfile
【发布时间】:2014-07-16 23:26:37
【问题描述】:

这似乎是一个常见问题。我想再问一次,看看是否有人提出了答案,或者看看是否有人可以提出其他建议。

我们有很多计算机和运行服务,更新它们通常是一件令人头疼的事情。 Docker 进来了。我们想自动化这个过程。 Docker 可以很好地解决这个问题,但我想自动化构建,以便我们团队中的任何人都可以这样做。

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

我可以做的一件事是使用 shell 脚本在本地克隆存储库,然后将它们复制到映像中,但由于有一个 dockerfile 可以自动执行操作,因此将说明放在那里似乎很自然。

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

目前我正在构建过程中复制我的 id_rsa。虽然是将其复制过来,从 repo 中提取,然后删除我的凭据。除了 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

【问题讨论】:

    标签: docker boot2docker


    【解决方案1】:

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

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

    如果您使用 github,请查看 documentation on Deploy Keys(即使您不使用它也可能会受到启发)。

    话虽如此,从 Dockerfile 中进行克隆并不是我的选择。我会为每个项目使用一个 Dockerfile 或类似的东西,以便克隆发生在构建之前并且独立于构建。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        • 2023-02-12
        • 1970-01-01
        • 2019-06-18
        相关资源
        最近更新 更多