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

Docker环境下Yesod构建失败问题求助

问题

尝试按照Yesod官方快速入门文档在Docker环境中构建Yesod项目,编写的Dockerfile内容如下:

# Dockerfile
FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install curl -y
RUN curl -sSL https://get.haskellstack.org/ | sh
RUN stack new my-project yesodweb/sqlite
RUN cd my-project && stack install yesod-bin --install-ghc
RUN cd my-project && stack build

执行docker build --tag host_yesod --file Dockerfile .命令时,前6步正常完成,但第7步cd my-project && stack build执行失败,耗时100.7秒。错误信息如下:

100.6 Error: [S-7282]
100.6        Stack failed to execute the build plan.
100.6
100.6        While executing the build plan, Stack encountered the error:
100.6
100.6        [S-7011]
100.6        While building package language-javascript-0.7.1.0 (scroll up to its section to see the
100.6        error) using:
100.6        /root/.stack/setup-exe-cache/x86_64-linux-tinfo6/Cabal-simple_6HauvNHV_3.6.3.0_ghc-9.2.8 --verbose=1 --builddir=.stack-work/dist/x86_64-linux-tinfo6/ghc-9.2.8 build --ghc-options ""
100.6        Process exited with code: ExitFailure 1

未在日志中找到具体错误线索,完整日志已归档。

解决方案

1. 补充系统构建依赖

Ubuntu 22.04镜像默认缺少Haskell包编译所需的基础工具和系统库,修改Dockerfile,在安装curl后添加必要依赖,同时合并RUN指令减少镜像层数:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
    curl \
    build-essential \
    libgmp-dev \
    zlib1g-dev
RUN curl -sSL https://get.haskellstack.org/ | sh
RUN stack new my-project yesodweb/sqlite
WORKDIR my-project
RUN stack install yesod-bin --install-ghc
RUN stack build

2. 升级Stack到最新版本

旧版Stack可能与部分Haskell包存在兼容性问题,替换原Stack安装命令为升级命令:

RUN curl -sSL https://get.haskellstack.org/ | sh -s -- --upgrade

3. 配置镜像源加速构建(可选)

若处于国内网络环境,添加国内Hackage镜像源可以大幅提升依赖下载速度,在Dockerfile中加入:

RUN mkdir -p /root/.stack && echo 'resolver: lts-20.25' > /root/.stack/config.yaml \
    && echo 'package-indices:' >> /root/.stack/config.yaml \
    && echo '  - download-package-list: true' >> /root/.stack/config.yaml \
    && echo '    hackage-security: true' >> /root/.stack/config.yaml \
    && echo '    url: https://mirrors.tuna.tsinghua.edu.cn/hackage/' >> /root/.stack/config.yaml

注意选择与项目匹配的resolver版本,避免依赖冲突。

4. 指定兼容的language-javascript版本

如果特定版本的language-javascript构建失败,强制使用已知兼容的版本。在Dockerfile中添加命令修改项目的stack.yaml:

RUN sed -i '/extra-deps:/a \  - language-javascript-0.7.2.0' my-project/stack.yaml

也可以手动编辑stack.yaml的extra-deps字段添加该版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:46:08