【问题标题】:why docker build send build context to docker daemon so slow为什么 docker build 将构建上下文发送到 docker daemon 这么慢
【发布时间】:2026-01-14 07:45:01
【问题描述】:

这是我的 dockerfile:

FROM nginx:1.21.1

ENV LANG=en_US.UTF-8 \
    LC_ALL=en_US.UTF-8 \
    TZ=Asia/Shanghai

MAINTAINER huanghaihua
ADD build/  /usr/share/nginx/html/
COPY default.conf  /etc/nginx/conf.d/default.conf

EXPOSE 80

当我使用此命令在服务器端构建时:

➜  pc-super-open git:(5b89d40) docker build -f ./Dockerfile -t=hades-pro/pc-super-frontend:1.0.0 .
Sending build context to Docker daemon  357.1MB

发送构建上下文步骤需要 10 分钟以上。在我的本地机器上,它完成不到 2 秒。我是在 iMac(16GB RAM + 512GB)上构建的,为什么需要这么长时间?我应该怎么做才能解决这个问题?我已经尝试将nginx镜像存储在阿里云中(避免从不同国家的docker下载大镜像):

docker tag nginx:1.21.1 registry.cn-hangzhou.aliyuncs.com/dabai_app_k8s/nginx:1.21.1 
docker push registry.cn-hangzhou.aliyuncs.com/dabai_app_k8s/nginx:1.21.1

并像这样更改 Dockerfile:

FROM registry.cn-hangzhou.aliyuncs.com/dabai_app_k8s/nginx:1.21.1

还是没有解决问题,还是很慢。

【问题讨论】:

  • 357.1MB是最终结果还是只是过程中的一个值?
  • 是的,它只是一个正在处理的值,它还没有完成。总值是500MB+,但我觉得这个过程没有网络交互,为什么这么慢?我不知道。@atline

标签: docker


【解决方案1】:

“发送构建上下文”步骤与基础映像下载无关。此步骤需要很长时间,因为您在远程构建器上运行,并且您的构建命令使用“。”作为它的构建上下文。这意味着您的本地目录的全部内容必须通过网络发送到您正在构建图像的机器上。这也是为什么它在本地机器上要快得多的原因;它不需要转移你的本地目录。

如果您将 .dockerignore 文件添加到本地目录,您可以通过在其中列出任何不必要的文件/目录来限制传输的内容。这将加快这一步。

【讨论】:

  • 最后发现mac服务器磁盘IO为3000+MB/s,IO已满,重启服务器后问题消失。
  • 无论如何,我发现传输时间非常慢。我看着它数了百分之一兆。
最近更新 更多