无网络环境下已下载所需镜像无法使用Testcontainers的问题咨询
报错根因
Testcontainers默认运行逻辑会主动向Docker Hub发起请求,校验镜像是否存在更新、拉取镜像元数据,即使本地已经提前下载好对应镜像也会触发该操作。无互联网环境下无法解析registry-1.docker.io地址,就会抛出该报错。
解决步骤
步骤1:修改代码主动指定本地已存在的镜像
你当前代码没有手动指定BrowserWebDriverContainer的镜像地址,Testcontainers会尝试使用默认匹配的镜像版本,可能和你本地存储的版本不一致,直接手动指定本地已有的镜像即可:
// 主动指定本地已下载的Firefox镜像,完全匹配本地镜像名和版本号 container = new BrowserWebDriverContainer<>("selenium/standalone-firefox-debug:2.45.0") .withCapabilities(Capabilities.getFirefoxOptions()) .withRecordingMode( webDriverForm.get().isVideoError() ? VncRecordingMode.RECORD_FAILING : VncRecordingMode.RECORD_ALL, new File(webDriverForm.get().getVideoPath()), VncRecordingFormat.MP4); // 注意你原代码这里少了首字母c,需修正 container.start(); WebDriver driver = container.getWebDriver();
步骤2:添加Testcontainers离线配置
在项目src/test/resources目录下新建testcontainers.properties文件,添加以下配置:
# 完全禁止Testcontainers主动拉取任何镜像,仅使用本地已存在的镜像 testcontainers.image.pull=never # 手动指定Testcontainers依赖的辅助镜像版本,和本地存储的版本匹配 ryuk.container.image=testcontainers/ryuk:0.3.2 vncrecorder.container.image=testcontainers/vnc-recorder:1.1.0
可选:关闭Ryuk辅助容器
如果修改后还是报错,可以添加配置关闭Ryuk容器(Ryuk是Testcontainers用于自动清理测试容器的辅助服务):
testcontainers.ryuk.disabled=true
*注意:关闭Ryuk后测试结束后需要手动清理残留的Testcontainers容器,避免占用系统资源。
修改完成后重新执行测试即可,Testcontainers会直接调用本地已有的镜像,不会再发起公网请求。
内容的提问来源于stack exchange,提问作者Александр Денисов
相关产品推荐
相关产品推荐

