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

如何让Cabal完全离线构建?依赖已存在仍拉取代码问题

实现Cabal完全离线构建的解决方案

要让Cabal彻底停止拉取远程包或Git仓库,仅依赖本地缓存完成构建,你可以通过以下关键调整实现:

1. 启用Cabal离线模式

Cabal自带--offline参数,强制其完全使用本地缓存资源,禁止任何网络请求。将该参数添加到cabal build和cabal install命令中即可。

2. 确保本地缓存的完整性

你现有的Docker多阶段构建已经完成了依赖缓存的核心工作——复制了Cabal配置目录和dist-newstyle/src(包含source-repository-package指定的Git仓库源码),只需在最终构建阶段启用离线模式即可。

修改后的Dockerfile示例

FROM gitlab:5050/haskell as dependencycache
WORKDIR /app
COPY ./.dummyProject/ ./
COPY ./api/cabal.project ./
RUN cabal update 
RUN cabal run dummyProject

FROM gitlab:5050/haskell 
WORKDIR /app
COPY --from=dependencycache /root/.cabal/ /root/.cabal/
COPY --from=dependencycache /app/dist-newstyle/src/ /app/dist-newstyle/src/
COPY ./api/ .
# 离线模式构建,仅使用本地缓存
RUN cabal build --offline api-server
# 离线模式安装
RUN cabal install --offline api-server 

关键说明

  • --offline参数会让Cabal跳过所有远程仓库的更新检查,直接使用本地已有的包索引、Hackage包和Git仓库源码。
  • 确保dependencycache阶段使用的cabal.project和最终构建阶段的完全一致,包括source-repository-package的所有配置,这样Cabal才能准确找到本地缓存的对应源码。
  • 若需要验证是否真的无网络请求,可添加--verbose参数查看构建日志,确认没有出现拉取远程资源的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:30