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

Ansible get_url模块报‘no route to host’错误求助

解决Ansible get_url任务无法通过代理连接Docker仓库的问题

我之前也碰到过几乎一模一样的场景——服务器本地用wget/curl能正常拉取文件,但Ansible的get_url模块就是报路由错误,给你几个亲测有效的排查和解决思路:

1. 显式传递代理环境变量

虽然你在模块里设了use_proxy: yes,但Ansible执行任务时的环境变量往往和你SSH登录后的会话环境不一样。试试在playbook里直接指定代理环境变量,覆盖默认的执行环境:

- name: 添加Docker仓库配置文件
  get_url:
    url: https://download.docker.com/linux/centos/docker-ce.repo
    dest: /etc/yum.repos.d/docker-ce.repo
    use_proxy: yes
    environment:
      http_proxy: http://192.168.1.240:8080
      https_proxy: http://192.168.1.240:8080
      no_proxy: localhost,127.0.0.1

重点要同时设置http_proxy和https_proxy,因为目标地址是HTTPS协议,部分代理服务器需要单独配置HTTPS的代理变量才能生效。

2. 检查Ansible全局配置的代理优先级

看看你的ansible.cfg文件里有没有全局代理配置,比如[defaults]段下的http_proxy/https_proxy设置,这些全局配置会覆盖模块级的代理参数。如果有冲突的配置,要么注释掉,要么改成你需要的代理地址:

# 示例:如果有类似配置,检查是否和目标代理一致
[defaults]
# http_proxy = http://other-proxy:8080

3. 用命令行单独测试get_url模块

直接用ansible命令行调用get_url模块,排除playbook其他逻辑的干扰,快速定位问题:

ansible your_rhel_host -m get_url -a "url=https://download.docker.com/linux/centos/docker-ce.repo dest=/tmp/test_docker.repo use_proxy=yes http_proxy=http://192.168.1.240:8080 https_proxy=http://192.168.1.240:8080"

如果这个单独任务能成功,说明是playbook里的其他配置影响了执行环境;如果还是失败,就聚焦到模块本身或代理的交互问题上。

4. 查看代理服务器的访问日志

登录到代理服务器(192.168.1.240),检查它的访问日志,看看Ansible发起的请求有没有被拦截或者记录异常。有时候本地wget/curl的请求和Ansible模块的请求在User-Agent、请求头等细节上有差异,导致代理服务器拒绝服务。

5. 尝试用uri模块替代get_url

如果get_url模块始终有兼容性问题,可以换成uri模块来下载文件,它的代理配置逻辑更灵活:

- name: 用uri模块下载Docker仓库配置
  uri:
    url: https://download.docker.com/linux/centos/docker-ce.repo
    dest: /etc/yum.repos.d/docker-ce.repo
    method: GET
    validate_certs: no  # 若代理存在证书验证问题可临时关闭,生产环境建议配置合法证书
    use_proxy: yes
    environment:
      http_proxy: http://192.168.1.240:8080
      https_proxy: http://192.168.1.240:8080

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:58:17