【问题标题】:Copying local git config into docker container将本地 git 配置复制到 docker 容器中
【发布时间】:2019-03-20 01:11:26
【问题描述】:

我同时使用 docker 和 docker-compose 来托管大部分是 LAMP 堆栈。我希望能够在我的一个容器中使用 git,而不会在构建后在推送时询问我的 user.email 和 user.name。以及我的 push.default 和分支设置等其他内容。有什么好方法可以让 docker 或 docker-compose 将 git config --list 的结果复制到容器中的文件中,然后我可以将其与我的入口点一起使用来设置 git config。

【问题讨论】:

    标签: linux git docker docker-compose


    【解决方案1】:

    有什么好的方法可以让 docker 或 docker-compose 将 git config --list 的结果复制到容器中的一个文件中,然后我可以将其与我的入口点一起使用来设置 git config。

    你真的不需要这样做来达到你的目标,有一个发件箱解决方案:

    对于运行 git 的主机,git config --list 的所有内容都存储在文件中:

    • 如果使用git config --system配置它们,它们存储在/etc/gitconfig
    • 如果使用git config --global配置它们,它们存储在~/.gitconfig

    所以,你只需要将文件挂载到容器中,然后就可以在主机上重用 git configure 了。

    如下所示,仅供参考。

    • 如果宿主使用--global配置git:

      docker run --rm -it -v ~/.gitconfig:/etc/gitconfig your_image_with_git git config --list
      

      输出:user.name=xxx

    • 如果宿主使用--system配置git:

      docker run --rm -it -v /etc/gitconfig:/etc/gitconfig your_image_with_git git config --list
      

      输出:user.name=yyy

    对于docker-compose,您只需配置volumes 即可定义挂载。

    【讨论】:

    • 您好,谢谢您的回复,太好了。我将使用 docker-compose 设置从 ~/.gitconfig 到 dockers ~/.gitconfig 的卷,除非您认为有理由不这样做。
    • 我不确定第二个~/.gitconfig 是否会在容器中解释,也许在主机中。也许必须对容器部分使用绝对路径,例如~/.gitconfig:/root/.gitconfig,而不是~/.gitconfig:~/.gitconfig,无论如何,您可以尝试一下,我不太确定关于此的撰写行为。
    • 我有一个用户设置可以在附加到容器时使用,所以他们有一个来自 /username/home 的主目录我可以使用。谢谢
    • 最后@lagom 我在我的 docker-compose.yml 中使用了- type: bind source: $HOME/.gitconfig target: /home/developer/.gitconfig,它很有效
    • 抱歉,我无意暗示您的答案不正确。只是为像我这样的其他人做路标,他们会在略有不同的情况下提出问题和答案。您的回答帮助我找到了最终解决方案。
    【解决方案2】:

    我假设您希望能够在容器中使用 git,但同时又不想一次又一次地输入您的用户名和密码?

    我能想到的方法很简单,在 Dockerfile 中添加git config 命令。

    原因是无论如何您都将以纯文本形式提供密码。

    所以,我的建议是将这些行添加到 Dockerfile。

    RUN git config --global user.name "your username"
    RUN git config --global user.password "your password"
    

    【讨论】:

    • 忘记回复了,这对我来说不是一个解决方案,原因有很多: * 我不是唯一的用户。 * 这限制了生产使用。 * 我绝对不会将我的 git 密码提交到任何地方,而且我个人也不会将它存储在我的 git 配置中。 * 不好的做法,硬编码细节而不是从它们保持更新的地方获取。
    • Dockerfiles 可以读取环境变量,这将成为一个选项,而无需将实际值提交到您的代码库。
    • 您也可以使用COPY,但正如 atline 在他的回答中提到的那样,绑定卷是真正的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多