在工作中,我们决定使用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"}
问题显然是我们的代理阻止了默认注册表。我可能会在我的机器上摆弄代理设置,这样注册表就可以解决了,但这不是整个公司的解决方案。这个应用程序将在许多不同的机器和环境上开发和运行,重新配置它们将比它的价值更多的努力。此外,根本不应该与默认注册表通信。我们有自己的注册表是有原因的。我在这里看到的唯一真正的解决方案是完全删除这个调用,但到目前为止,DockerImageName和容器的文档都没有帮助。
如果有人尝试过,或者有其他解决方案,这将非常有帮助。
我已经意识到我的错误。文档中的这一页揭示了这个问题。运行时,TestContainers库主要为管理上述容器创建额外的容器。除非指定了位置,否则它将尝试从默认注册表中提取这些信息。可以使用上面链接中的说明指定首选注册表。
正如雅皮士-流感在他们的评论中也提到的,这个链接可能提供一个很好的,全局的方式来设置注册表。