我们的团队正在使用Docker构建我们的Haskell应用程序,为了优化构建时间,我们努力将操作系统中的~/.stack
目录与docker容器内的一个共享。最初的实现只是重用OS中的那个,但事实证明这不能很好地工作,它失败并出现如下错误:
The GHC located at /root/.stack/programs/x86_64-linux/ghc-8.0.1/bin/ghc failed to compile a sanity check. Please see:
http://docs.haskellstack.org/en/stable/install_and_upgrade/
for more information. Exception was: Running /root/.stack/programs/x86_64-linux/ghc-8.0.1/bin/ghc /tmp/stack-sanity-check48/Main.hs -no-user-package-db in directory /tmp/stack-sanity-check48/ exited with ExitFailure 127
/root/.stack/programs/x86_64-linux/ghc-8.0.1/bin/ghc: line 9: /home/ubuntu/.stack/programs/x86_64-linux/ghc-8.0.1/lib/ghc-8.0.1/bin/ghc: No such file or directory
make: *** [adserver_executables] Error 1
好像~/.stack
中的某个地方有一个缓存,它指明了GHC的绝对路径,当我们在docker中挂载~/.stack
时,它会挂载为/root/.stack
而不是{{} 1}},因此该路径找不到编译器。
我们目前的决定是创建一个单独的目录/home/<user>/.stack
,我们将用于所有基于docker的构建,而不会干扰操作系统级别的目录。这并不理想,因为它会占用更多空间,即使在非docker操作系统级环境中编译它们也需要重新编译包。
是否有更好的方法可以建议与内部码头工作堆共享~/.docker-stack
?谢谢。