我想为工作设置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这样的东西。
答案 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