Codeception WebDriver无法访问localhost 请求协助排查问题
解决Codeception+Docker Selenium无法访问宿主机localhost的问题
这是个典型的Docker容器网络场景问题,核心原因是Selenium容器内部的localhost指向容器自身,而非你的宿主机,所以容器里的Chrome无法访问到你本地运行在localhost:8888的服务。下面是具体的解决步骤:
1. 修改Codeception配置中的目标URL
将acceptance.suite.yaml里的url参数替换为Docker能识别的宿主机地址:
- 对于macOS/Linux/Windows(Docker Desktop),可以直接使用Docker内置的域名
host.docker.internal,它会自动映射到宿主机的IP:
actor: AcceptanceTester modules: enabled: - WebDriver: url: 'https://host.docker.internal:8888' # 替换原localhost为host.docker.internal browser: chrome clear_cookies: true port: 4444 capabilities: browser: chrome goog:chromeOptions: w3c: false
- 如果
host.docker.internal无法生效,也可以直接使用宿主机的局域网IP(比如192.168.1.100:8888),确保Selenium容器能通过网络访问到这个IP。
2. 确保本地服务监听正确的地址
检查你本地运行的服务是否仅绑定了127.0.0.1(即只能本机访问),如果是,需要修改为绑定0.0.0.0,这样才能允许来自Docker容器的连接。比如启动服务时指定监听地址:
# 示例:假设你的服务是用PHP内置服务器启动 php -S 0.0.0.0:8888
3. 额外排查项
- 检查宿主机防火墙设置,确保8888端口允许来自Docker容器所在网络的入站连接;
- 如果你使用了自定义Docker网络而非默认的桥接网络,需要确认网络配置允许容器与宿主机互通。
为什么外部网站能正常运行?
因为外部网站是公网可访问的地址,Selenium容器可以通过宿主机的网络正常解析并访问这些地址,而localhost在容器内部指向自身,自然找不到你宿主机上的服务。
内容的提问来源于stack exchange,提问作者Timur
相关产品推荐
相关产品推荐

