在 Rancher 管道中并行推送多个 Docker 镜像
Posted
技术标签:
【中文标题】在 Rancher 管道中并行推送多个 Docker 镜像【英文标题】:Pushing multiple Docker images in parallel in Rancher pipeline 【发布时间】:2020-05-04 01:38:46 【问题描述】:由于我们管道的构建时间增加,我们尝试了一些方法来改进它。一个需要相当长的时间的步骤是按顺序运行的 docker images push 步骤。由于是 12 张图片,这一步需要 12-14 分钟,我们决定尝试并行推送图片(考虑到这将花费 12-14 到 2-4 分钟的时间)。
在发布图像阶段尝试了多个步骤,但都失败了。
- name: Publish images
steps:
- publishImageConfig:
dockerfilePath: ./frontend/deployment/Dockerfile
buildContext: ./frontend
tag: registry.remote.com/remote/frontend-$CICD_EXECUTION_ID
pushRemote: true
registry: registry.remote.com
- publishImageConfig:
dockerfilePath: ./gateway/backend/src/Dockerfile
buildContext: ./gateway/backend
tag: registry.remote.com/remote/backend-$CICD_EXECUTION_ID
pushRemote: true
registry: registry.remote.com
[...]
一个图像被推送,但其余的都失败了Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
我也尝试从/etc/docker/daemon.json
增加--max-concurrent-uploads
,但没有任何成功。
【问题讨论】:
一个小提示:也许你可以使用 docker-layer-caching 加快构建时间。 您能分享一下您的 Docker 版本吗? Docker 版本 19.03.5 你的 Rancher 版本呢? Rancher 版本为 v2.3.2。在他们的存储库中也创建了一个问题:github.com/rancher/rancher/issues/24988。也许这是一个实际的错误 【参考方案1】:Docker 的/var/lib/docker
只能由单个守护进程管理。如果您想发布多个,则有一种解决方法。试试这样的:
stages:
- name: Publish images_1
steps:
- publishImageConfig:
dockerfilePath: ./frontend/deployment/Dockerfile
buildContext: ./frontend
tag: registry.remote.com/remote/frontend-$CICD_EXECUTION_ID
pushRemote: true
registry: registry.remote.com
- name: Publish images_2
steps:
- publishImageConfig:
dockerfilePath: ./gateway/backend/src/Dockerfile
buildContext: ./gateway/backend
tag: registry.remote.com/remote/backend-$CICD_EXECUTION_ID
pushRemote: true
registry: registry.remote.com
env:
PLUGIN_STORAGE_PATH: /var/lib/docker_2
[...]
此错误已在this thread 中报告,您可以在此处找到更多信息。
问题应该在 Rancher v2.2
中解决,但有些人仍然在 v2.3
中遇到这个问题。
但是,解决方法仍然有效。
我将此答案发布为社区 wiki,因为修复不是我最初的想法。
如果有帮助,请告诉我。
【讨论】:
感谢 Mark 的回答,尽管从 v2.2.1 开始推送多个图像已经有效。我可以推送多个图像,但不能同时推送。您的配置会一个接一个地推送图像,这需要时间。我已经尝试过这种解决方法来进行调查,但没有任何运气。 我明白了。在这种情况下,应该在您创建的 GitHub 线程中调查此错误。以上是关于在 Rancher 管道中并行推送多个 Docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章