构建rust-backend-image镜像时Postgres.rs出现文件找不到错误
解决Docker构建Rust镜像时include_str!找不到migrations文件的问题
先确认构建上下文和文件复制逻辑:
- 必须在项目根目录执行
docker build -t rust-backend-image .,如果误在src目录下运行命令,Docker构建上下文里没有migrations文件夹,编译时自然找不到文件。 - 打开Dockerfile检查COPY指令,确保
migrations目录被复制到容器工作目录中。比如需要添加:
保证它和COPY migrations/ migrations/src/、Cargo.toml等文件处于容器内的同一层级。
- 必须在项目根目录执行
验证容器内的文件结构(可选调试步骤):
在Dockerfile的RUN cargo build指令前添加临时命令,查看容器内的文件布局:RUN ls -la # 若WORKDIR是/app,此命令会列出/app下的所有文件,确认migrations存在运行构建命令后就能看到容器内的文件情况,排查路径是否正确。
不要随意修改include_str!的路径:
你本地终端能通过相对路径找到文件,说明代码里的../migrations/xxx.sql写法是对的。Docker容器内的工作目录如果和项目根目录对应(比如WORKDIR设为/app,复制后/app下有src和migrations),这个路径在容器内同样有效,改了反而会出错。清理构建缓存重试:
旧的Docker构建缓存可能残留错误的文件结构,执行以下命令强制重新构建:docker build --no-cache -t rust-backend-image .
内容的提问来源于stack exchange,提问作者John Aschenbrenner
相关产品推荐
相关产品推荐

