Docker-compose运行Selenium测试出现net::ERR_CONNECTION_REFUSED错误
问题根因
net::ERR_CONNECTION_REFUSED 报错是因为Selenium Chrome容器内的浏览器尝试访问测试页面时,无法连通Capybara自动启动的Rails测试服务器:
- Capybara默认将测试服务器绑定在
127.0.0.1,只有web容器自身可以访问,同Docker网络内的Selenium容器无法访问 rails_helper.rb中配置的Capybara.asset_host = 'http://localhost:3000'指向的是Chrome容器自身的3000端口,而非web容器的服务地址
解决方案
1. 修改rails_helper.rb配置
找到Capybara相关配置段,调整如下:
# 在原有Capybara配置基础上添加/修改以下参数 # 让测试服务器绑定到0.0.0.0,允许同Docker网络的其他容器访问 Capybara.server_host = '0.0.0.0' # 配置Selenium访问测试服务的地址为web容器的服务名(Docker内置DNS可直接解析) Capybara.app_host = 'http://web' Capybara.always_include_port = true # 删除原有 Capybara.asset_host = 'http://localhost:3000' 配置,该参数会干扰访问路径
2. 调整测试执行流程
执行测试前先启动所有依赖服务,确保Selenium相关组件正常运行:
# 启动后台依赖服务 docker-compose up -d db selenium-hub chrome # 执行测试命令 docker-compose run web bundle exec rspec
可选兼容配置
如果调整后仍存在域名解析问题,可以在docker-compose.yml的web服务段添加显式hostname配置:
web: build: . hostname: web # 其余原有配置保持不变
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

