You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker COPY --link 是否会忽略 .dockerignore 规则?

问题解答

核心结论

COPY --link没有禁用.dockerignore,你遇到的性能差异是由两者的实现逻辑差异导致的。

原因分析

普通的COPY . .执行逻辑:

  • 先读取.dockerignore规则,在本地构建上下文阶段就过滤掉所有被排除的文件
  • 只把符合规则的文件发送到Docker构建引擎,所以你本地的20GB测试文件完全不会被处理,自然瞬间完成

而COPY --link . .的实现逻辑不同:

  • 它会直接扫描本地整个目录的所有文件
  • 在容器内部的目标路径中,再根据.dockerignore规则过滤掉不需要的文件
  • 虽然最终不会复制那些20GB的测试文件,但扫描整个目录(包括大量被忽略的文件)的过程需要花费大量时间,这就是你看到耗时近一分钟的原因

Docker官方文档里提到的"性能等同于或优于默认行为",是在没有大量被忽略文件的场景下。当本地存在大量被.dockerignore排除的文件时,COPY --link的扫描逻辑会导致性能下降。

解决方案

  • 如果项目结构暂时无法调整,可以在这个构建阶段暂时去掉--link参数,换回普通的COPY . .
  • 优化目录结构:把需要复制到镜像中的文件(比如src、Cargo.toml、data、fonts等)单独放在一个子目录下,这样COPY --link只需要扫描这个子目录,避免遍历大量被忽略的文件

附:你的配置信息

Dockerfile

# syntax=docker/dockerfile:1.4
FROM clux/muslrust:1.69.0-nightly-2023-02-15 AS chef
USER root
RUN cargo install cargo-chef
WORKDIR /app

FROM chef AS planner
ARG CARGO_INCREMENTAL=0
COPY --link . . <--- 此步骤耗时极长
...

.dockerignore

*
!src
!Cargo.toml
!Cargo.lock
!data/default.toml
!data/favicon.ico
!data/example.ttl   
!data/*.html
!data/*.css
!fonts

内容的提问来源于stack exchange,提问作者Konrad Höffner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:32:49