Codeception中Docker版WebDriver访问本地7070端口连接被拒绝问题
问题根本原因
你启动的Selenium Chrome容器默认使用桥接网络模式,容器内部的localhost指向的是容器自身的环回地址,而非宿主机的localhost,因此无法访问宿主机上通过OpenShift端口转发暴露的7070端口服务。
可行解决方法
方案1(仅Linux宿主机适用):改用宿主机网络模式启动容器
启动容器时指定--net=host参数,容器将直接共享宿主机的网络栈,此时容器内的localhost和宿主机完全一致,也不需要额外映射4444端口:docker run -d --net=host --shm-size="2g" selenium/standalone-chrome:4.1.0-20211123方案2(全平台通用):修改目标访问地址为宿主机映射地址
不需要改容器启动参数和WebDriver基础配置,只需要调整步骤代码里的目标地址:- Mac/Windows宿主机:Docker内置了指向宿主机的特殊域名
host.docker.internal,把地址改为http://host.docker.internal:7070即可 - Linux宿主机:可以在启动容器时添加参数
--add-host=host.docker.internal:host-gateway,之后也可以使用上面的特殊域名,调整后的启动命令如下:docker run -d -p 4444:4444 --add-host=host.docker.internal:host-gateway --shm-size="2g" selenium/standalone-chrome:4.1.0-20211123
你也可以直接填写宿主机的docker0网卡IP(通常为
172.17.0.1)或者宿主机的局域网IP作为目标地址前缀。- Mac/Windows宿主机:Docker内置了指向宿主机的特殊域名
注意:不需要修改WebDriver配置中的url: http://localhost:4444,这个地址是宿主机上运行的测试脚本连接Selenium容器的地址,端口映射正常的情况下无需调整。
内容的提问来源于stack exchange,提问作者Chirashidon
相关产品推荐
相关产品推荐

