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

Docker cp命令拷贝异常:仅复制obj\Docker\empty目录结构求助

解决Docker cp仅复制特定目录的问题

看起来你遇到的问题主要出在.dockerignore的规则写法上,尤其是路径分隔符和匹配逻辑的问题,我来一步步帮你排查和解决:

1. 修正.dockerignore的路径格式

Docker的忽略规则采用Unix风格的路径分隔符/,而不是Windows的\——在.dockerignore里\是转义字符,会导致你的规则完全匹配不到实际目录。把你的.dockerignore改成:

!obj/Docker/publish/
!obj/Docker/publish/**
!obj/Docker/empty/
!obj/Docker/empty/**
  • !obj/Docker/publish/:确保包含这个目录本身
  • !obj/Docker/publish/**:包含目录下所有子文件和子目录
  • 同理处理empty目录,保证整个目录结构都能被复制

如果你的需求是复制当前目录下所有内容(而不是仅这两个目录),那其实你根本不需要这几条!规则——.dockerignore默认会包含所有内容,除非你主动写了排除规则。要是你之前误加了*这样的全局排除规则,记得先排除再包含:

# 先排除所有内容
*
# 再包含需要的目录和项目核心文件
!obj/Docker/publish/
!obj/Docker/publish/**
!obj/Docker/empty/
!obj/Docker/empty/**
!*.csproj
!Controllers/
!Program.cs
# 其他你需要保留的文件/目录

2. 调整docker cp命令的目标路径

容器内的路径是Linux风格的,建议用绝对路径开头,并且结尾加/明确指定目标是目录(避免Docker误把它当成文件处理):

docker cp . eac334ba8bf6:/inetpub/wwwroot/Web.API/

3. 快速验证忽略规则是否生效

如果还是有问题,可以先测试.dockerignore的实际过滤效果:

# 启动临时Alpine容器,挂载当前目录,查看过滤后的内容
docker run --rm -v ${PWD}:/test alpine ls -la /test

这个命令会显示当前目录经过.dockerignore过滤后的内容,能帮你快速定位哪些文件被意外排除了。

新手小提示

刚接触Docker很容易踩路径分隔符的坑,记住这几点:

  • 容器内的路径永远用/
  • .dockerignore和Dockerfile里的路径统一用/
  • Windows PowerShell里可以用${PWD}代替手动输入本地路径,避免拼写错误

内容的提问来源于stack exchange,提问作者DiegoChicken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:26:33