Docker中Gogs自动化拉取代码后用户组不一致问题

  • 内容
  • 评论
  • 相关

Gogs简单的自动化部署在之前的文章已经讲过,这次主要讲docker搭建的Gogs中,自动化拉取代码时的用户组问题。

重温一次自动化码拉取流程:

1.首先docker在创建Gogs容器的时候,就设置好挂载到服务器上指定存放代码的目录;
2.在Gogs中设置git hook,使到代码push的时候,Gos在容器中指定存放代码的位置把代码pull下来。
3.因为做了目录挂载,所以pull的代码也直接能在服务器中被挂载的目录中找到,以达到自动化部署的目的。

但是!你绝大可能会发现,服务器中被pull下来的代码的用户和用户组并不是自己平时放代码的用户和组,这是怎么回事?比如博主的用户和组平时是www的,但是自动化pull下来之后,文件就变成了用户为www组为mysql。

于是我到Gos所在的容器里面看一下用户和组,发现通过git钩子pull下来的代码的用户和组都是为git的。通过cat /etc/passwd对比一下容器和服务器的用户和组,发现容器中的git git对应的就是服务器中的www mysql。

于是我将容器中的git用户和组的ID进行修改,改成与服务器中www用户和组一致,再重新提交代码。这下服务器中的用户和组就变成了www www了,这才是我想要的。

总结,通过docker容器挂载服务器的目录,尤其是存放项目的目录。如果服务器项目目录中有设置好用户和组的,那么容器中自动化提交代码的用户和组ID必须要设置成和服务器的用户和组ID一致。

附修改用户ID和组ID的方法:

usermod -u 用户ID git(修改git用户ID)
groupmod -g 组ID git(修改git用户组ID)