Tag: 哈斯克尔

在Docker容器中使用堆栈失败的Haskell安装:打开的文件太多

我有一个简单的Dockerfile FROM haskell:8 WORKDIR "/root" CMD ["/bin/bash"] 我运行安装pwd文件夹到“/ root”。 在我目前的文件夹中,我有一个使用堆栈(funblog)的Haskell项目。 我在stack.yml中configuration了使用“lts-7.20”parsing器,其目的是安装ghc-8.0.1。 在容器内部,运行“堆栈更新”后,我运行了“堆栈设置”,但在GHC编译过程中出现“系统中打开的文件太多”。 这是我的stack.yaml flags: {} packages: – '.' – location: git: https://github.com/agrafix/Spock.git commit: 2c60a48b2c0be0768071cc1b3c7f14590ffcc7d6 subdirs: – Spock – Spock-core – reroute – location: git: https://github.com/agrafix/Spock-digestive.git commit: 4c85647427e21bbaefbf04c4bc315d4bdfabba0e extra-deps: – digestive-bootstrap-0.1.0.1 – blaze-bootstrap-0.1.0.1 – digestive-functors-blaze-0.6.0.6 resolver: lts-7.20 一个导入说明:我不想使用Docker来部署应用程序,只是为了编译它,即作为我的开发过程的一部分。 有任何想法吗? 我应该使用另一个图像没有ghc预安装使用docker? 哪一个? 更新 是的,我可以使用容器中的内置GHC,这是一个好主意,但是想知道在Docker中构buildGHC是否有问题。 更新2 对于任何想重现(在MAC OSX的方式),你可以克隆repo […]

哈斯克尔,docker工人:堆栈下载失败

我有一个haskell工作的docker镜像: https : //hub.docker.com/r/fpco/stack-build/ 。 直到今天,就是。 项目目录中的任何堆栈命令都会响应: $ stack build Downloading Docker-compatible stack executable Control.Exception.Safe.throwString called with: Could not get release information for Stack from: https://api.github.com/repos/commercialhaskell/stack/releases/tags/v1.6.1.1 Called from: throwString (src/Stack/Setup.hs:1768:14 in stack-1.6.1.1-LhZa5A6LsiS9SkA3QDJMKN:Stack.Setup Google不是很有帮助。 有任何想法吗? 错误完全是“无端的”:昨天的构build是平淡无奇的。

Docker容器中的Yesod应用程序无法发出networking请求

我有一个Yesod应用程序,我将其部署到Docker容器中的Heroku。 该应用程序使用Amazon SES发送电子邮件。 当使用yesod devel在本地运行应用程序,这工作正常,但在Heroku的容器上,我得到以下错误: HttpExceptionRequest Request { host = "email.eu-west-1.amazonaws.com" port = 443 secure = True requestHeaders = [("Content-Type","application/x-www-form- urlencoded"),("Date","Wed, 20 Sep 2017 12:39:49 +0000"),("X-Amzn- Authorization","AWS3-HTTPS AWSAccessKeyId=AKIAIBUN4ZEOKYKOB35A, Algorithm=HmacSHA256, Signature=xh3fi4EJOAe0LOZVCng5NRZIw2D+6P++0aO4Q5Dy0gw=")] path = "/" queryString = "" method = "POST" proxy = Nothing rawBody = False redirectCount = 10 responseTimeout = ResponseTimeoutDefault requestVersion = HTTP/1.1 } […]

哈斯克尔堆栈图像容器执行在Docker上运行

我正在关注堆栈和docker的turorial,通过docker运行haskell build。 build设和图像创作效果很好,我可以通过docker run -p 5000:5000 {imagename} {app-exe}应用程序docker run -p 5000:5000 {imagename} {app-exe} 我正在使用最新堆栈的function来构build这个最小configuration的docke映像。 image: container: base: "fpco/ubuntu-with-libgmp" 我如何使图像自动启动可执行文件,以便我可以键入docker run -p 5000:5000 {imagename} 。 我知道如何在dockerfile中完成,而不是在堆栈中。 我在想,我必须使用: entrypoints: – appname-exe 没有成功,不pipe我只是使用可执行文件的名称或绝对path。 也许我不明白什么是入口点。 我正在使用Docker for Mac。 任何build议感激。 干杯比约恩

堆栈/泊坞窗/ IHaskell怪异的行为

我有一堆* .c和* .cpp文件,列在*.cabal文件的c-sources字段中。 我需要将它包含在IHaskell和其他一些软件包的项目中。 一切正常,build立没有问题。 stack exec ghci工作正常,我可以导入模块并执行任何代码。 stack ghci虽然抛出一些奇怪的错误,像这样: In file included from <command-line>:10:0: /…blabla…/.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/autogen/cabal_macros.h:157:0: note: this is the location of the previous definition #define CURRENT_PACKAGE_KEY "blabla" ^ 我的包中stack ghci抱怨从它的C代码导出的符号。 另一个奇怪的是,符号依赖于configuration中显示exposed-modules的顺序,所以如果我把* .hs模块放在其他模块上,错误就会消失,但是如果我有两个* .hs文件从相同的* .c文件,它不会工作! stack exec jupyter — console –kernel haskell启动,但立即抛出unknown symbol错误,如果我试图从我的包运行一些代码,总是相同的。 我有一个基于fpco/stack-build镜像, fpco/stack-build安装了jupyter和其他必要的东西。 我使用lts-3.0快照,如果它有某种相关性的话。 到底是怎么回事?

如何在没有使用socket文件的情况下启动docker守护进程?

如果我们使用诸如-H 1.2.3.4:7777类的标志来启动-H 1.2.3.4:7777守护进程,那么/var/run/docker.sock文件将不会被创build,并且各种stack操作(如stack docker pull失败: $ stack docker pull Pulling image from registry: 'tweag/haskellr:latest' Post http:///var/run/docker.sock/v1.20/images/create?fromImage=tweag%2Fhaskellr%3Alatest: dial unix /var/run/docker.sock: no such file or directory. * Are you trying to connect to a TLS-enabled daemon without TLS? * Is your docker daemon up and running? Could not pull Docker image: tweag/haskellr:latest There may not be an […]

tf-random将不会安装在Docker容器中

我正在为Docker构build我自己的Haskell开发基础镜像。 下面的我的Dockerfile的块导致一个错误(完整的消息如下): ENV LANG en_GB.UTF-8 RUN ["add-apt-repository", "-y", "ppa:hvr/ghc"] RUN ["apt-get", "update"] RUN ["apt-get", "install", "-y", "cabal-install-1.20", "ghc-7.8.3"] ENV PATH ~/.cabal/bin:/.cabal/bin:/opt/cabal/1.20/bin:/opt/ghc/7.8.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin RUN ["cabal", "update"] RUN ["cabal", "install", "cabal-install"] RUN ["cabal", "install", "happy"] RUN ["cabal", "install", "alex"] 错误是: cabal: Error: some packages failed to install: QuickCheck-2.7.6 depends on tf-random-0.5 which failed to install. alex-3.1.3 depends on […]

如何使用Haskell Stack和Docker Compose?

我正在尝试使用docker组合来为本地开发绑定一些haskell服务。 大部分时间我都在stack ghci ,运行unit testing等,但我也需要能够运行符合依赖的代码。 Docker撰写非常棒:我可以运行依赖项(数据库,其他服务等),并将所有内容链接在一起。 堆栈有docker支持。 它可以使用docker: enable: true在docker容器中构build,也可以使用stack image container创build可执行映像。 如何在docker-compose.yml利用栈的docker-compose.yml ? version: "3" services: my-service: # how can I use `stack image container` here? Is it possible? build: '.' links: – other-service env_file: – test.env other-service: image: other-service-image 我是否必须制作自己的Dockerfile,或者有什么方法可以使用stack image containerfunction? 后续问题:有没有办法用docker撰写文件的所有设置(env,links等)来运行stack ghci ?

在Docker中静态链接Haskell程序

我正在尝试从Haskell源代码构build一个静态链接的二进制文件,并将此二进制文件复制到一个最小的Docker映像,以使我的生产映像尽可能小。 作为一个testing用例,我正在使用hello world程序: main = print "Hello world" test.cabal文件是由cabal init生成的默认值,除了我添加的 ghc-options: -static -optc-static -optl-static -optl-threaded build立我运行 $ docker run -it -v $(pwd):/src haskell:7.10 /bin/bash # cd src # cabal build 该版本提供了以下错误: opt/ghc/7.10.1/lib/ghc-7.10.1/rts/libHSrts.a(Linker.o): In function `internal_dlopen': (.text+0x727): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for […]

Haskell – Alpine Docker映像中的主机名parsing不起作用

问题 我正在尝试在Haskell应用程序里面创builddocker镜像。 然而,在我的应用程序内的泊坞窗容器networking中的其他容器的主机名的域名parsing失败(但我能够wget / ping其他容器和他们的主机名正确解决)。 为了find根本原因,我尝试手动parsing主机名(使用Network.DNS包),并只使用servant-client IP地址。 但是,这只会产生一个神秘的错误信息: Network.BSD.getProtocolByName: does not exist (no such protocol name: udp) 我想我错过了我的泊坞窗图像中的一些包。 我试过安装libc6-compat但没有成功(Debian的libc6被用来编译Haskell应用程序)。 而且/etc/protocols包含正确的条目。 docker图像里还有什么东西丢失? Docker镜像 我用来运行应用程序的docker图像是alpine:3.6 – 整个docker文件,没有太多 。 这是用来构build应用程序的不同的图像(它是大约20倍)。 我用来构buildhaskell应用程序的docker镜像基于debian:stretch 。 Dockerfile 。 带有构build指令的整个源代码可以在这里find(angular部分可以跳过): https://github.com/carbolymer/blockchain/tree/0b041875f71b2a09dc8568ee7b0cc22460fd5624