构建Nginx Docker镜像时COPY含@路径失败的问题求助
解决Docker COPY指令中带@符号路径的问题
嘿,我之前也碰到过这个坑,Docker的COPY指令处理带@符号的路径确实容易出问题,尤其是搭配通配符的时候。给你几个实用的解决方案:
方法一:移除通配符,直接复制目录内容
这是最省心有效的办法。把路径里的*去掉,换成源路径末尾的斜杠,Docker会自动把dist目录下的所有内容复制到目标目录,效果和用*完全一致,还能避开@符号的解析问题:
COPY node_modules/@company/my-package/dist/ /usr/share/nginx/html/
注意源路径最后的斜杠很关键——它告诉Docker要复制的是目录里的内容,而不是目录本身。
方法二:用Golang Glob兼容的写法
Docker的COPY底层依赖Golang的filepath.Glob匹配文件,@符号本身并不是Glob的特殊字符,问题出在*和@组合时的匹配逻辑异常。如果一定要用通配符,可以尝试写完整的相对路径,或者用**递归匹配(不过这里你只需要dist下的文件,方法一更合适)。
为啥之前的转义都没用?
你试过的\、""、''这些转义方式不生效,是因为Golang的Glob根本不需要转义@符号——@不是Glob的特殊元字符,转义后反而会让路径变成\@company,和你实际的@company目录不匹配,自然找不到文件啦。
另外也可以再确认下Docker构建上下文里确实存在node_modules/@company/my-package/dist目录,虽然你说移除@就正常,但偶尔也可能是拼写错误或者目录权限的小问题。
内容的提问来源于stack exchange,提问作者talabes
相关产品推荐
相关产品推荐

