可以在不尝试调用默认注册表的情况下启动 java TestContainer 吗?

问题描述

在工作中,我们决定使用 java TestContainers 包,而学习和实现这个包的任务就落在了我的肩上。需要注意的是,安全是工作的重中之重,因此我们使用代理并运行我们自己的注册表来包含我们的 docker 镜像。

这是我目前所得到的。

var dockerImage = DockerImageName.parse("<secure-registry>/mongo:latest")
                .asCompatibleSubstituteFor("mongo");
        MongoDBContainer mongoDBContainer = new MongoDBContainer(dockerImage)
                .withImagePullPolicy(PullPolicy.defaultPolicy())
                .withExposedPorts(27019);
        mongoDBContainer.start();

不是很多,但那是因为我不能再进步了。每当我尝试运行此代码时,它都会在抛出以下错误之前达到 .start()

com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"message":"Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.1:53: no such host"}

问题显然是我们的代理阻止了默认注册表。我可能会在我的机器上摆弄代理设置,以便可以解析注册表,但这不是公司范围内的解决方案。这个应用程序将在许多不同的机器和环境上开发和运行,重新配置所有这些将比它值得付出更多的努力。此外,它根本不应该与默认注册表通信。出于某种原因,我们拥有自己的注册表。我在这里看到的唯一真正的解决方案是完全删除此调用,但到目前为止,DockerImageNamecontainers 的文档都没有帮助。

如果有人尝试过此方法或有其他解决方案,那将非常有帮助。

解决方法

我已经意识到自己的错误了。文档中的 This page 揭示了问题。运行时,TestContainers 库会创建额外的容器,主要用于管理所述容器。除非指定了位置,否则它将尝试从默认注册表中提取这些。可以使用上面链接中的说明指定首选注册表。

正如 yuppie-flu 在他们的评论中提到的那样,this link 可以提供一种很好的全局方式来设置注册表。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...