Gitlab Runner上传Artifacts时出现no such host连接错误求助
问题解决:GitLab Runner上传Artifacts失败+拉取代码超时
问题根源分析
- Artifacts上传失败:错误中出现的Hetzner递归DNS地址,说明构建容器在解析
gitlab域名时使用的是主机系统DNS,而非Docker内部DNS。核心原因是你的Runner Docker Executor设置了network_mode = "host",导致构建任务容器脱离了proxy-network,无法利用Docker内部服务发现机制找到gitlab容器。 - 代码拉取超时:构建容器处于host网络下,无法正常访问GitLab的外部反向代理地址
myurl:443,大概率是反向代理配置限制、防火墙规则或网络路由问题导致。
解决方案
方案1:调整Runner网络模式(推荐)
将Runner构建容器的网络改为与GitLab相同的proxy-network,让构建容器通过Docker DNS直接解析gitlab容器名:
- 编辑Runner的
config.toml,修改[runners.docker]区块下的网络配置:
[runners.docker] tls_verify = false image = "ubuntu:latest" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size = 0 network_mtu = 0 network_mode = "proxy-network" # 替换原有的host配置
- 重启GitLab Runner容器:
docker restart runner
方案2:保留host网络,修改Runner访问地址
如果必须使用host网络,需让Runner通过主机映射端口访问GitLab:
- 编辑Runner的
config.toml,将url改为GitLab在主机上的映射地址:
[[runners]] name = "runner" url = "http://localhost:8080" # 替换原有的http://gitlab # 其他配置保持不变
- 在GitLab的
compose.yml的GITLAB_OMNIBUS_CONFIG中添加内部API地址配置,确保Runner能正确上传Artifacts:
gitlab_rails['internal_api_url'] = 'http://localhost:8080'
- 分别重启GitLab和Runner容器。
解决代码拉取问题
- 若使用方案1(proxy-network):可在GitLab项目中将仓库remote地址改为内部地址
http://gitlab/developer/test.git,或在GitLab的GITLAB_OMNIBUS_CONFIG中补充配置:
gitlab_rails['gitlab_url'] = 'http://gitlab'
- 若使用方案2(host网络):检查Nginx Proxy Manager配置,确保主机及host网络下的容器能正常访问
myurl:443,必要时调整防火墙或反向代理的允许规则。
验证
重新触发CI/CD任务,检查Artifacts上传是否正常,同时确认代码拉取步骤不再超时。
内容的提问来源于stack exchange,提问作者Sleither Milton Reyes
相关产品推荐
相关产品推荐

