Docker镜像含带空格文件名文件时执行docker push推送失败问题咨询
这是Windows平台运行Linux容器场景下的已知缺陷,底层原因是旧版Docker for Windows使用的Hyper-V Linux虚拟机在处理含空格的文件路径时,内部命令解析逻辑没有正确转义空格,导致镜像层校验时的cat命令被拆分成了多个参数,执行失败。Docker本身对带空格的文件名没有限制,纯Linux环境下的Docker引擎可以正常构建、推送包含带空格文件名的镜像。
你可以通过以下方法解决该问题:
- 升级Docker引擎到最新稳定版:该路径解析bug已经在2020年后发布的Docker Desktop/Windows Server 版Docker引擎中修复,升级后重启Docker服务,重新构建镜像即可正常推送。
- 切换Linux容器运行后端:如果你的Windows Server 2019版本号高于1903,可以将Docker的Linux容器后端从Hyper-V切换为WSL2,完全规避该虚拟机路径解析问题。
- 调整Docker数据根目录:打开Docker的配置文件
daemon.json,添加"data-root": "C:\\docker"(路径需无空格、且赋予Authenticated Users完全控制权限),保存后重启Docker服务,重新构建镜像后重试。 - 临时规避方案:如果暂时无法升级或调整配置,可以在构建镜像时将所有含空格的文件打包为单个tar包,容器启动时再执行解压操作,避免镜像层中直接存在带空格的文件路径。
内容的提问来源于stack exchange,提问作者gvdm
相关产品推荐
相关产品推荐

