Docker COPY指令仅识别相对路径不识别绝对路径问题咨询
问题原因解答
你的写法不存在语法错误,该报错是Docker的构建上下文机制限制导致的:
- Dockerfile中
COPY指令的源路径不直接对应宿主机的文件系统路径,所有源路径都是相对于**构建上下文(Build Context)**的根目录进行解析 - 你执行
docker build命令时末尾指定的路径就是构建上下文根目录,比如最常用的docker build .就是把当前执行命令的工作目录作为上下文根。Docker会先把该目录下的所有文件打包上传给Docker daemon,只有在这个打包范围内的文件才能被COPY指令读取,即使宿主机其他路径存在对应文件,Docker daemon也无权直接访问 - 相对路径
COPY ./foo/bar /能正常执行,说明你执行构建命令时的上下文目录下确实存在./foo/bar路径,符合访问规则 - 你写的绝对路径
COPY /foo/bar /会被Docker解析为「查找构建上下文根目录下的foo/bar路径」,而非宿主机根目录下的/foo/bar,因此会触发找不到文件的报错
解决方案
你可以根据需求二选一:
- 优先选择:将宿主机上的
/foo/bar目录拷贝到你当前的构建上下文目录内,继续使用相对路径执行COPY即可 - 特殊场景可选:调整构建上下文为宿主机根目录,执行命令为
docker build / -f 你的Dockerfile文件路径,非常不推荐该方案,会导致Docker打包整个宿主机文件系统,构建速度极慢且存在严重安全风险
内容的提问来源于stack exchange,提问作者timsterc
相关产品推荐
相关产品推荐

