til*_*til 6 docker docker-compose buildx
动机
我有一个 docker compose,它有几个服务,这些服务可能非常大,由于从注册表加载,它们会显着影响 ci 时间。
为了减少构建和启动时间,我对许多服务使用 --cache-to 和 --cache-from 。
使用缓存需要 docker buildx。
问题
docker compose build会导致 buildx 的并行执行和容器名称“/buildx_buildkit_*”的名称冲突
滚动浏览“解决方案”部分以查看我正在使用的文件以及底部的错误消息
解决方案
请参阅fbjorn 的回答
另请注意以下事项:在撰写本文时,图像通常docker:20.10.16-dind用于 CICD dind 管道。为了使这个场景发挥作用,我必须使用 docker:dind (即最新的 dind)
# dind.yml
version: '3.9'
services:
dind:
image: docker:dind
privileged: true
restart: always
volumes:
- /dockerbuild:/build/dockerbuild
Run Code Online (Sandbox Code Playgroud)
# docker-compose.yml
version: '3.9'
services:
my_service:
build:
context: .
cache_from:
- type=local,src=./${CACHE_DIR:-build-cache}/my_service
cache_to:
- type=local,dest=./${CACHE_DIR:-build-cache}/my_service
dockerfile: Dockerfile
image: ${MY_IMAGE_TAG:-dockerbuild:latest}
command: tail -f /dev/null
your_service:
build:
context: .
cache_from:
- type=local,src=./${CACHE_DIR:-build-cache}/your_service
cache_to:
- type=local,dest=./${CACHE_DIR:-build-cache}/your_service
dockerfile: Dockerfile
image: ${MY_IMAGE_TAG:-dockerbuild:latest}
command: tail -f /dev/null
# sqlserver:
# build:
# context: ./Dockerfile_sqlserver
# cache_from:
# - type=local,src=./${CACHE_DIR:-build-cache}/mssql
# cache_to:
# - type=local,dest=./${CACHE_DIR:-build-cache}/mssql
# image: mcr.microsoft.com/mssql/server:2019-CU19-ubuntu-20.04
Run Code Online (Sandbox Code Playgroud)
# Dockerfile
FROM alpine:latest
CMD ["/bin/sh"]
Run Code Online (Sandbox Code Playgroud)
# snippet from gitlab-ci - I'm running these commands in the dind container.
script:
- cd /build/dockerbuild
- docker buildx create --use --name my_builder_1
# my_builder_1
- docker compose build
# /build/dockerbuild # docker compose build
# [+] Building 38.4s (2/2) FINISHED
# => CANCELED [your_service internal] booting buildkit
# => => pulling image moby/buildkit:buildx-stable-1
# => => creating container buildx_buildkit_my_builder_10
# => ERROR [my_service internal] booting buildkit
# => => pulling image moby/buildkit:buildx-stable-1
# => => creating container buildx_buildkit_my_builder_10 s
# ------
# > [my_service internal] booting buildkit:
# ------
# Error response from daemon: Conflict. The container name "/buildx_buildkit_my_builder_10" is already in use by container "...".
# You have to remove (or rename) that container to be able to reuse that name.
Run Code Online (Sandbox Code Playgroud)
我通过在一个图像中构建多个图像来面临类似的问题。还说The container name "/buildx_buildkit_*" is already in use by container <..>。
我的解决方案是在创建构建器时通过附加标志来引导构建器--bootstrap。尝试将命令更改为:
docker buildx create --use --bootstrap --name my_builder_1
Run Code Online (Sandbox Code Playgroud)
然后您的构建命令将不会尝试引导容器,因为它已经完成了。
| 归档时间: |
|
| 查看次数: |
1567 次 |
| 最近记录: |