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

时间:2017-04-16 07:05:37

标签: haskell haskell-stack

我想为工作设置Haskell堆栈项目的容器化构建。我知道crontab存在,但我希望只使用docker执行此操作,因此我的同事不需要先安装stack --docker build

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

stack

我正在运行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,这似乎不太理想

我还没弄清楚它是否会破坏原生堆栈构建或者像intero这样的东西。

2 个答案:

答案 0 :(得分:0)

我通常在随附的volumes文件中放置docker-compose.yml部分,将.stack-work目录挂载到容器中。然后,在ENTRYPOINT的{​​{1}}中引用的脚本中,使用Dockerfile代替stack install

我的stack build文件可能如下所示,其中docker-compose.yml文件夹包含我的本地backend目录:

.stack-work

答案 1 :(得分:0)

我的解决方案如下。

构建的docker镜像没有堆栈设置。

FROM fpco/stack-build:lts-9.14
ADD ./build.sh /bin/
ENTRYPOINT ["build.sh"]

biuld.sh上运行堆栈设置。

stack setup --resolver=lts-9.14 --allow-different-user
stack build --allow-different-user

在运行时从主机挂载项目目录和stack_root。

docker run -w /workspace -v ~/myproject:/workspace -v ~/.stack:/root/.stack