You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向容器内的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:59:45