You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:40:25