Docker命令执行异常:无法找到Cargo.toml,请求排查修正
问题排查与解决方案
第一个报错:无效的挂载路径(Git Bash + Windows环境)
报错根源是Windows下的Git Bash会自动把$(pwd)解析成Windows风格路径(比如C:/Program Files/Git/xxx),但Docker的volume挂载要求用Unix风格绝对路径,导致格式不兼容。
解决办法:
- 在命令前加上
MSYS_NO_PATHCONV=1禁用路径转换,让$(pwd)输出Unix格式路径:MSYS_NO_PATHCONV=1 docker run --rm -v "$(pwd)":/contract \ --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ enigmampc/secret-contract-optimizer - 也可以直接把
$(pwd)替换成当前目录的Unix风格绝对路径,比如/c/Users/你的用户名/合约代码目录
第二个报错:找不到Cargo.toml
这个问题是修改命令时误改了本地目录到容器/contract的挂载配置,导致容器内/contract路径下没有同步到你的Cargo.toml文件。
验证与修复:
- 执行命令前先确认当前工作目录确实是Cargo.toml所在的目录,用
ls命令能看到该文件才算正确。 - 必须保留
-v "$(pwd)":/contract的正确格式,配合上面的MSYS_NO_PATHCONV=1参数,确保本地目录正确映射到容器的/contract目录。
额外验证步骤
可以先跑个测试命令确认挂载是否正常:
MSYS_NO_PATHCONV=1 docker run --rm -v "$(pwd)":/contract alpine ls /contract
如果输出里有Cargo.toml,说明挂载没问题,再执行优化器命令即可。
内容的提问来源于stack exchange,提问作者ChristianOConnor
相关产品推荐
相关产品推荐

