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

Stack无法定位Haskell可执行文件以复制到Docker容器的问题

解决Stack无法找到可执行文件生成Docker镜像的问题

看起来你的核心问题是Stack的构建流程没有将编译好的可执行文件放到它预期的目录下,导致stack image container和stack build --copy-bins找不到目标文件。让我一步步帮你解决:

问题根源

Stack的stack build命令默认采用开发构建模式,它只会把编译好的可执行文件存放在项目的dist临时目录(也就是你通过find找到的.stack-work/dist/...路径),不会将文件复制到Stack的标准install目录(.stack-work/install/.../bin)。而stack image container和--copy-bins参数都是从这个标准install目录读取可执行文件的,所以才会出现找不到的错误。

解决步骤

  1. 清理旧构建缓存
    先清理之前的构建残留,避免缓存干扰:

    stack clean
    
  2. 安装可执行文件到标准目录
    使用stack install命令替代stack build,这个命令会完成编译,并自动将可执行文件复制到Stack的install目录下:

    stack install
    

    执行完成后,你可以去.stack-work/install/x86_64-linux-.../lts-11.9/8.2.2/bin/目录下查看,haskell-gae可执行文件应该已经存在了。

  3. 生成Docker镜像
    现在再执行stack image container命令,Stack就能正确找到可执行文件,并将其打包到Docker镜像中了:

    stack image container
    

额外验证

如果你想快速验证可执行文件是否在正确位置,也可以执行:

stack build --copy-bins

(注意是--copy-bins,不是你之前写的--copy bins,参数名是连在一起的)
这个命令现在应该能成功将可执行文件复制到默认的本地bin目录。

你的cabal文件和stack.yaml配置都是正确的,尤其是docker部分已经指定了entrypoints: - haskell-gae,只要可执行文件在正确路径,镜像就能正常生成。

内容的提问来源于stack exchange,提问作者Rob Cohen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:03:36