如何向容器内的Git服务器执行git push?本地推送至容器端口22方法
向Docker托管的Git服务器执行git push的完整步骤
我来一步步帮你搞定这个问题——其实核心逻辑和你本地推送到admin用户的场景类似,但因为多了Docker容器这一层,需要处理端口映射、容器内的Git配置和SSH权限这些细节,具体操作如下:
1. 先确认Docker端口映射是否正确
首先得确保你的Git服务器容器已经把内部的22端口(SSH默认端口)正确映射到了本地的22端口。你可以用docker ps命令查看容器状态,在PORTS列应该能看到类似0.0.0.0:22->22/tcp的记录。如果没映射对,得重新启动容器并加上端口映射参数,比如:
docker run -d -p 22:22 --name git-server [你的Git服务器镜像名称]
2. 配置本地SSH免密访问容器内的Git用户
Git服务器通常用git用户来接收推送(不建议用root或其他用户),所以得让本地能通过SSH免密连接到容器里的git用户:
- 如果你本地还没有SSH密钥,先生成一个:
一路回车用默认配置就行。ssh-keygen -t ed25519 -C "your-email@example.com" - 把本地的公钥复制到容器内
git用户的授权文件里:docker cp ~/.ssh/id_ed25519.pub git-server:/home/git/.ssh/authorized_keys - 进入容器调整权限(SSH对文件权限要求很严,权限不对会拒绝连接):
docker exec -it git-server chmod 700 /home/git/.ssh docker exec -it git-server chmod 600 /home/git/.ssh/authorized_keys docker exec -it git-server chown -R git:git /home/git/.ssh
3. 在容器内创建可接收推送的裸仓库
Git服务器需要用裸仓库来接收推送(普通仓库不能直接接收远程推送),所以进入容器创建一个:
# 切换到git用户 docker exec -it git-server su - git # 创建仓库目录并初始化裸仓库 mkdir -p repos/my-project.git cd repos/my-project.git git init --bare # 退出git用户和容器 exit
4. 给本地Git仓库配置远程地址
回到你本地的代码仓库,添加指向Docker容器Git服务器的远程地址:
git remote add docker-remote ssh://git@localhost:/home/git/repos/my-project.git
这里的git是容器内的Git用户,localhost因为端口映射到了22,所以不用额外指定端口;如果你的容器映射的是其他端口(比如2222),就要写成ssh://git@localhost:2222/home/git/repos/my-project.git。
5. 执行git push推送代码
现在就可以正常推送了,比如推送到main分支:
git push docker-remote main
如果你的主分支是master,就把main换成master即可。
常见问题排查
- 连接被拒绝:先检查容器是否在运行(
docker ps),端口映射是否正确,本地防火墙有没有拦截22端口的连接。 - 权限错误:检查容器内
authorized_keys的权限是否正确,git用户对裸仓库目录有没有读写权限。 - 主机密钥验证失败:可以删除本地
~/.ssh/known_hosts里对应的localhost条目,重新连接时会自动生成新的密钥记录;测试时也可以临时用ssh -o StrictHostKeyChecking=no git@localhost跳过验证(不推荐长期使用)。
内容的提问来源于stack exchange,提问作者Austin Heath
相关产品推荐
相关产品推荐

