我有一个用于amd的docker文件和另一个用于arm的docker文件。我们将它们命名为my-priv-registry/amd
和my-priv-registry/arm
。我运行了一个CI,它在修改完成时编译映像。amd.dockerfile
和arm.dockerfile
是相同的
FROM ubuntu:20.04
WORKDIR /install
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 python3-pip python3-dev \
git wget build-essential \
curl zip unzip tar \
vim automake libssl-dev \
&& rm -rf /var/lib/apt/lists/*
RUN python3 -m pip install -U pip
RUN apt-get update && apt-get install -y --no-install-recommends cmake \
&& rm -rf /var/lib/apt/lists/*
COPY --chown=1000:1000 boost.sh .
RUN ./boost.sh
... I stop here as the CI stops here too
我已经在我的docker注册表中有了我的图像,我可以连接到gitlab-runner
的主机并实际拉取,我还可以列出我在主机中本地拥有的标记。
我的跑步者的外形是
concurrent = 8
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "my_executor"
url = "https://my.server.io"
token = "WontShowIt"
executor = "shell"
environment = [
"GIT_STRATEGY=clone",
]
shell = "bash"
cache_dir = "/cache"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
在我的CI中,我像这样编辑图像
DOCKER_BUILDKIT=1 docker buildx build \
--platform linux/arm64 \
-t my-priv-registry/arm:test \
-f arm.dockerfile \
--cache-to=type=inline \
--cache-from=type=registry,ref=my-priv-registry/arm:latest \
install_scripts
但是,在以下消息之后
#28 importing cache manifest from my-priv-registry/arm:latest
#28 DONE 0.0s
#8 [internal] load build context
#8 transferring context: 568B done
#8 DONE 0.0
它就卡住了。
知道为什么会失败吗?更多信息:
- AMD图像实际上起作用。
- 我想这意味着这不是登录问题
- 我可以连接到
gitlab-runner
的主机并拉取映像,它工作正常 - 如果我连接到主机并自己运行构建,它也会挂起,所以这似乎不是gitlab-runner的问题。
- 我正在并行运行所有的构建作业(三个构建作业使用buildx),这会是一个问题吗?
编辑1:
我还尝试该高速缓存导入为:
--cache-from=type=local,src=/var/lib/docker/buildkit
但还是卡住了。
**编辑2:**还尝试使用其他生成器
docker buildx create --name DockerImageBuilder --use
并在本地使用缓存
--cache-from type=local,src=/tmp/docker-cache \
--cache-to type=local,dest=/tmp/docker-cache,mode=max \
还挂着...
**编辑3:**我重新启动了主机PC,并且...它工作了几个管道,但是现在它又挂起了。
1条答案
按热度按时间brtdzjyr1#
尝试在docker构建中添加
--network host
选项,强制docker直接使用主机的网络堆栈,这里是你的gitlab runner主机,正如你所说,它没有网络问题。