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

使用docker-compose部署Semaphore:Git仓库克隆失败问题

Docker部署Semaphore后容器内无法克隆GitHub仓库的网络问题排查与解决

问题背景

已通过docker-compose完成Semaphore部署,使用GitHub个人访问令牌(PAT)配置了目标仓库,Ansible主机上可正常克隆该仓库,但Semaphore容器内克隆操作失败。同时已为Semaphore前端配置Nginx反向代理。

现有网络配置

当前主机上的nftables规则如下(注意原规则存在语法错误,已修正网段位置):

# Enable IP forwarding
sysctl -w net.ipv4.ip_forward=1
# Apply NAT rule for Docker custom network
nft flush ruleset
nft add table ip nat
nft add chain ip nat POSTROUTING { type nat hook postrouting priority srcnat \; }
nft add rule ip nat POSTROUTING ip saddr 172.18.0.0/16 oifname != "docker0" masquerade

克隆失败错误日志

1:57:45 PM Task 15 added to queue
1:57:45 PM Started: 15
1:57:45 PM Run TaskRunner with template: test-template
1:57:45 PM Preparing: 15
1:59:55 PM fatal: unable to access 'https://github.com/org/ansible-configs/': Failed to connect to github.com port 443 after 130064 ms: Could not connect to server
1:59:55 PM Cloning Repository https://github.com/org/ansible-configs
1:59:55 PM Cloning into 'repository_1_template_1'...
2:02:06 PM Failed updating repository: exit status 128
2:02:06 PM Failed to run task: exit status 128

排查方向与配置调整

1. 修复NAT规则语法错误

原规则中ip saddr与oifname之间缺失网段参数,导致NAT规则未生效。执行以下命令修正规则:

nft flush ruleset
nft add table ip nat
nft add chain ip nat POSTROUTING { type nat hook postrouting priority srcnat \; }
nft add rule ip nat POSTROUTING ip saddr 172.18.0.0/16 oifname != "docker0" masquerade

根据操作系统不同保存规则,避免重启后丢失:

  • Debian/Ubuntu:nft list ruleset > /etc/nftables.conf
  • RHEL/CentOS:nft list ruleset > /etc/sysconfig/nftables.conf

2. 验证容器基础网络连通性

进入Semaphore容器内部,分步测试网络:

  • 测试网络出口:ping 8.8.8.8,若不通则说明容器路由或NAT配置存在问题
  • 测试GitHub端口连通性:telnet github.com 443或curl -v https://github.com,确认是否能建立TCP连接

3. 检查Docker网络配置

通过docker inspect <semaphore-container-name>查看容器网络信息,确认:

  • 容器所属网络的driver为默认的bridge模式
  • 容器IP属于172.18.0.0/16网段

4. 排查防火墙出站规则

确认主机防火墙未拦截容器出站流量:

  • 检查是否有拦截443端口的规则:nft list ruleset | grep "tcp dport 443"
  • 若使用ufw,添加允许Docker网段流量的规则:ufw allow from 172.18.0.0/16

5. 修正容器DNS配置

进入容器查看/etc/resolv.conf,若DNS服务器配置异常,可在docker-compose.yml中手动指定:

services:
  semaphore:
    # 其他配置项
    dns:
      - 8.8.8.8
      - 8.8.4.4

6. 验证PAT与仓库地址有效性

在容器内手动测试克隆,排除凭证或地址问题:

git clone https://<你的PAT令牌>@github.com/org/ansible-configs.git

确认PAT已拥有repo权限(私有仓库需此权限),仓库地址无拼写错误。

内容的提问来源于stack exchange,提问作者raghu_manne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:57:33