使用cargo-wharf构建Rust Docker镜像时无法加载本地依赖dep1
解决cargo-wharf构建Rust项目时无法加载同层级自定义依赖的问题
问题根源
Docker构建过程中,仅会将指定的上下文目录(默认是当前执行命令的.)打包发送给Docker daemon,你的自定义依赖dep1位于项目目录的上级目录(../dep1),不在默认的构建上下文范围内,因此cargo-wharf在容器环境中无法找到该依赖文件。
解决方案
调整Docker构建命令的上下文到包含project_name和dep1的父目录,同时指定项目的Cargo.toml路径:
# 若当前处于project_name目录下,执行此命令 docker build -f ./Cargo.toml ../ -t project_name
或者直接切换到父目录执行:
cd .. docker build -f ./project_name/Cargo.toml ./ -t project_name
原理说明
将构建上下文设置为父目录后,Docker会把project_name和dep1两个子目录都包含进上下文包中,cargo-wharf在容器内解析dep1 = {path = "../dep1"}时,就能正常找到对应的Cargo.toml文件,和本地开发环境的路径解析逻辑一致。
验证步骤
- 执行上述构建命令,确认不再出现
无法读取/dep1/Cargo.toml的错误 - 构建完成后运行容器,验证项目功能正常:
docker run --rm project_name
内容的提问来源于stack exchange,提问作者yölö
相关产品推荐
相关产品推荐

