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
相关产品推荐
相关产品推荐

