COPY指令用于将宿主机文件或目录复制到镜像指定路径,仅支持构建上下文内文件,推荐配合WORKDIR使用且优先于ADD。

COPY 指令用于把宿主机上的文件或目录复制到镜像的指定路径中,常用于添加静态资源(如 HTML、CSS、JS、图片等)到 Web 服务镜像里。
COPY 静态资源的基本写法
语法很简单:COPY <源路径> <目标路径>。源路径是构建上下文中的相对路径(不能是绝对路径或父目录 ../),目标路径是容器内的绝对路径或相对于 WORKDIR 的路径。
- 复制单个文件:
COPY index.html /usr/share/nginx/html/ - 复制整个静态目录:
COPY static/ /app/static/(注意末尾斜杠不影响行为,但推荐加斜杠表示目录) - 用通配符复制一类文件:
COPY *.js /app/js/(只匹配构建上下文根目录下的 .js 文件)
确保资源在构建上下文内
Docker 构建时只能访问 构建上下文(build context) 目录里的文件。如果静态资源不在 docker build 命令指定的上下文目录里,COPY 会报错“no such file or directory”。
- 推荐把
Dockerfile和静态资源放在同一项目根目录下 - 运行构建时,用
docker build -t myapp .(最后的.表示当前目录为上下文) - 避免写
COPY ../assets/logo.png /app/—— 父目录默认不可见
配合 WORKDIR 使用更清晰
如果设置了 WORKDIR /app,后续的 COPY 目标路径可以写相对路径,语义更明确:
WORKDIR /app-
COPY package.json .(复制到 /app 下) -
COPY public/ ./public/(复制 public 目录内容到 /app/public)
注意:COPY public/ ./public/ 和 COPY public ./public 效果相同;但 COPY public ./public/(目标带斜杠)会强制创建 public 目录再复制,更稳妥。
别混淆 COPY 和 ADD
COPY 更轻量、更安全,只做复制;ADD 有额外行为(如自动解压 tar、支持远程 URL),对静态资源没必要用它。
- 静态资源一律优先用
COPY - 不要写
ADD styles.css /app/css/—— 没必要,且易引发意外解压 - 如果要从远程拉资源(不推荐在构建阶段做),才考虑 ADD,但通常应提前下载或用多阶段构建


















