按照他们的指导,我们正在尝试使用Spring Native。此外,我们希望使用Gradle和Buildpacks。我们已经相应地调整了配置(build.gradle
),并运行./gradlew bootBuildImage
来构建Spring Native映像。
出现问题是因为我们被迫使用我们公司的自定义Docker映像注册表。因此,我们不能直接拉,例如docker.io/paketobuildpacks/run:tiny-cnb
,而必须使用docker-io.docker-proxy.ourcompany.com/paketobuildpacks/run:tiny-cnb
之类的东西。
我们已经提取并重新标记了该过程中使用的构建器映像paketobuildpacks/builder
。但是由于其余的都在这个构建容器内发生,我们不能再使用这个解决方案了。所以我们得到:
* What went wrong:
Execution failed for task ':bootBuildImage'.
> Docker API call to 'localhost/v1.24/images/create?fromImage=docker.io%2Fpaketobuildpacks%2Frun%3Atiny-cnb' failed with status code 500 "Internal Server Error" and message "Get "https://registry-1.docker.io/v2/": context deadline exceeded"
(可能因为试图连接*.docker.io
会超时)
到目前为止,我们还没有找到配置进程使用的Docker注册表的可能性。我们也可以找一棵更大的"树"。在以后的过程中需要进一步的依赖项,在下面的文件中描述(其中引用gcr.io
而不是docker.io
)。
我们不允许直接访问公共注册表,因此没有进一步的想法。那么,您能想到使用您自己的代理注册中心来实现构建Spring Native映像的目标吗?
提前感谢!
使用pack
命令行,您可以运行pack config registry-mirrors add <registry> [-m <mirror...] [flags]
,例如:pack config registry-mirrors add index.docker.io --mirror 10.0.0.1
,其中10.0.0.1
是您的私有注册表。
https://buildpacks.io/docs/tools/pack/cli/pack_config_registry-mirrors_add/
在Spring Boot的Gradle支持中,您有docker.builderRegistry
和docker.publishRegistry
设置,但这些设置主要用于提供用于从注册表获取或发布映像的凭据。他们不完全做我们这里需要的。
https://docs.spring.io/spring-boot/docs/2.6.7/gradle-plugin/reference/htmlsingle/build-image.docker-registry
对镜像功能的支持,如pack
cli,目前不是一个选项。已经打开了一个问题来跟踪对它的支持,所以希望它能在未来的版本中可用。
同时,您可以使用pack
cli和上面的镜像选项来构建映像。
测试/验证的快速方法:
运行
docker run -d -p 5000:5000 --restart=always --name=registry -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2
。这将运行镜像Docker Hub的本地注册表。执行
pack config registry-mirrors add '*' --mirror localhost:5000
命令,告诉pack
命令行使用注册表镜像。运行
pack build
对你的应用程序,你应该看到输出如下:
Using mirror localhost:5000/paketobuildpacks/builder:base for index.docker.io/paketobuildpacks/builder:base
base: Pulling from paketobuildpacks/builder
83525de54a98: Pulling fs layer
807f554cf05f: Pulling fs layer
...
如果你看到这一行,你就知道它工作正常。
你也应该在你的pack
配置中看到:
> cat ~/.pack/config.toml
[registry-mirrors]
"*" = "localhost:5000"
这意味着您已经正确设置了注册表镜像。