问题描述
在工作中,我们决定使用 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 和 containers 的文档都没有帮助。
如果有人尝试过此方法或有其他解决方案,那将非常有帮助。