基于selenium/standalone-chrome镜像的Java Selenium容器连接失败求助
解决java.net.UnknownHostException: chrome问题
问题根因
你在同一个Docker容器内同时运行Selenium Chrome Standalone服务和Java测试代码,但代码中使用chrome作为主机名,而容器内部并没有对应的DNS解析记录,导致无法定位到Selenium服务地址。
修复方案
方案1:修改代码中的连接地址
将RemoteWebDriver的目标地址替换为容器内部的本地地址,因为Selenium服务是在当前容器内启动的,localhost或127.0.0.1均可指向容器自身:
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.chrome());
方案2:添加容器内部host映射
如果不想修改代码,可通过两种方式将chrome映射到本地回环地址:
- 在Dockerfile中添加host配置:
RUN echo "127.0.0.1 chrome" >> /etc/hosts - 或者在
docker run命令中追加参数:docker run --add-host chrome:127.0.0.1 [你的镜像名称]
方案3:用Docker Compose拆分服务(更规范的生产级方案)
将Selenium Chrome服务和Java测试项目拆分为两个独立容器,利用Docker Compose的自动DNS解析实现通信:
- 创建
docker-compose.yml文件:
version: '3' services: chrome: image: selenium/standalone-chrome:96.0.4664.45 ports: - "4444:4444" java-test: build: . depends_on: - chrome
- 此时Java代码中原有的
http://chrome:4444/wd/hub地址可直接生效,因为Docker Compose会自动为同网络内的容器添加DNS解析。
验证步骤
修改后重新构建镜像(若改动了Dockerfile),运行容器并执行测试,确认UnknownHostException错误不再出现。
内容的提问来源于stack exchange,提问作者samaritan
相关产品推荐
相关产品推荐

