Docker构建失败:启动容器时找不到./jwt可执行文件
问题排查:Rust项目Docker容器启动失败(找不到jwt可执行文件)
问题背景
配置了Rust项目的Dockerfile与docker-compose.yml,执行命令:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
时出现启动错误,错误信息:
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./jwt": stat ./jwt: no such file or directory: unknown
错误原因
Dockerfile生产阶段的文件复制路径错误,导致编译好的Rust可执行文件不在容器启动时的预期位置:
- Builder阶段编译完成后,可执行文件
jwt生成在/jwt/target/release/目录下 - 原Dockerfile使用
COPY --from=builder /jwt/ ${APP}/jwt将整个builder阶段的/jwt目录复制到容器的${APP}/jwt路径下 - 容器启动时工作目录为
${APP},ENTRYPOINT执行./jwt会寻找${APP}/jwt,但实际可执行文件在${APP}/jwt/target/release/jwt,因此找不到文件
修复方案
方案1:直接复制编译好的二进制文件(推荐)
修改Dockerfile生产阶段的COPY命令,只复制编译完成的可执行文件到工作目录:
# 替换原COPY命令 COPY --from=builder /jwt/target/release/jwt ${APP}/
修改后,可执行文件jwt会直接放在${APP}目录下,与ENTRYPOINT的./jwt路径匹配。
方案2:调整ENTRYPOINT路径
如果需要保留原目录结构,可修改ENTRYPOINT指向实际的可执行文件路径:
# 替换原ENTRYPOINT ENTRYPOINT ["./jwt/target/release/jwt"]
额外检查点
- 确认builder阶段编译成功:查看构建日志,或临时运行builder容器检查
/jwt/target/release/jwt是否存在 - 检查
docker-compose.dev.yml是否覆盖了ENTRYPOINT或command配置,导致启动路径异常
内容的提问来源于stack exchange,提问作者user19598592
相关产品推荐
相关产品推荐

