haskell - 如何在 Docker 容器中运行堆栈构建?

标签 haskell haskell-stack

我想为工作建立一个 Haskell 堆栈项目的容器化构建。我知道stack --docker build存在,但我想只用 docker 来做,所以我的同事不需要先安装 stack .

我目前有一个看起来像这样的 Dockerfile:

FROM fpco/stack-build:lts-8.9
RUN mkdir -p /stack && stack --stack-root /stack setup --resolver lts-8.9
COPY build.sh /
ENTRYPOINT ["/build.sh"]

并且正在运行 stack作为:
stack build --stack-root=/stack --resolver=lts-8.9

但是,这样做存在以下问题:
  • 每次
  • 都会重建所有依赖项
  • 它需要 --allow-different-users ,因为它似乎在重复使用我的本地 .stack-work ,这似乎不太理想

  • 我还没有弄清楚它是否会破坏 native 堆栈构建,或者诸如 intero 之类的东西。

    最佳答案

    我通常把 volumes附带的 docker-compose.yml 中的部分将挂载 .stack-work 的文件目录到容器中。然后在 ENTRYPOINT 中引用的脚本中的Dockerfile , 使用 stack install而不是 stack build .

    我的 docker-compose.yml文件可能看起来像这样,其中 backend文件夹包含我的本地 .stack-work目录:

    version: "2"
    services:
      backend:
        build: ./docker-containers/backend
        tty: true
        stdin_open: true   
        volumes:
          - ./backend:/home/dev/backend
          - ./.local:/root/.local
    

    关于haskell - 如何在 Docker 容器中运行堆栈构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43434680/

    相关文章:

    haskell - 如何为自定义新类型派生 PersistField?

    haskell - 将单词添加到 Trie 数据结构

    haskell - 堆栈安装在几乎任何东西上崩溃

    haskell - 多个文件使用相同的模块名称 :

    haskell - 全局 Stack config.yaml 中的标志

    function - map map vs map.map

    haskell - 多角色认证

    haskell - 如何在 runResourceT 中捕获异常

    haskell - 如何设置使用 Stack 构建的 Haskell 项目的可执行输出位置?

    linux - 如何在Linux上的2018年安装Haskell(平台或堆栈)?