首页 > 解决方案 > 为什么 docker build 将构建上下文发送到 docker daemon 这么慢

问题描述

这是我的码头文件:

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

仍然没有解决问题,仍然很慢。

标签: docker

解决方案


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

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


推荐阅读