如何以当前用户身份运行 GIT 容器?

Posted

技术标签:

【中文标题】如何以当前用户身份运行 GIT 容器?【英文标题】:How can you run a GIT container as the current user? 【发布时间】:2019-05-29 04:12:22 【问题描述】:

我想在 Docker 容器中使用 GIT。 https://hub.docker.com/r/alpine/git/ 上记录的用法非常简单:

docker run -it --rm -v $HOME:/root -v $(pwd):/git alpine/git clone ...

这行得通。这样做的一大缺点是所有文件现在都归root 所有,而不是当前用户。我想解决这个问题,但到目前为止都失败了。

我当前的命令是:

docker run -it --rm
       --user $(id -u):$(id -g)
       -v $HOME:$HOME:rw
       -v /etc/passwd:/etc/paswd:ro
       -v /etc/group:/etc/group:ro
       -v $PWD:$PWD:rw
       -w $PWD
       alpine/git
       clone ...

在这里,我通过--user $(id -u):$(id -g) 以当前用户身份运行。另外,我正在传递$HOME/etc/passwd/etc/group 以允许容器解析当前用户和主目录。

这会产生以下错误:No user exists for uid 1000。这是从哪里来的,如何解决?

版本信息:docker run -it --rm alpine/git --version 给出git version 2.15.0

【问题讨论】:

您是否在 Container 中创建了额外的用户?运行 Docker 容器的主机上的用户在容器内部是不可见的。您需要先在容器内创建一个用户。 我希望能够通过传递$HOME/etc/passwd/etc/group 来避免这种情况。我希望这就足够了。手动创建用户会额外提供什么? 我没有你描述的问题。在 ubuntu 18.04 你有一个错字(/etc/paswd 有一个 S);但不能保证这些文件就足够了(某些系统使用密码数据库)。目前尚不清楚“没有用户存在...”消息的来源。也不清楚-v 是否允许文件——docker run 文档中的描述指的是目录,而不是文件。 @torek 哦,我的... 错字确实是这里的错误。谢谢,不胜感激! 【参考方案1】:

这很尴尬。正如 @torek 在 cmets 中指出的那样,我有一个错字。应该是:

docker run -it --rm
       --user $(id -u):$(id -g)
       -v $HOME:$HOME:rw
       -v /etc/passwd:/etc/passwd:ro
       -v /etc/group:/etc/group:ro
       -v $PWD:$PWD:rw
       -w $PWD
       alpine/git
       clone ...

这按预期工作!

【讨论】:

好吧,我想它确实允许文件,它们就足够了。 :-) 是的,-v 可用于文件。此外,在从alpine 基本映像派生的大多数典型情况下,传递/etc/passwd 对我来说效果很好。 @torek 我刚刚意识到发布我自己的答案可能是不礼貌的。如果您愿意,请随时回答,我将接受您的接受。 不,没关系。我了解到 docker 会挂载文件,而不仅仅是目录! :-)

以上是关于如何以当前用户身份运行 GIT 容器?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Docker 容器克隆 Git 存储库

如何在没有管理员权限的情况下使用 vbs 将任务设置为在登录时以当前用户身份运行?

如何以管理员身份运行 Git Bash(总是)

WiX ServiceInstall - 将服务设置为以当前 Windows 用户身份运行

Golang如何让子进程以另一个用户身份运行

LocalSystem 服务如何以用户身份运行应用程序 [C#]?