我有一个简单的Dockerfile
FROM haskell:8
WORKDIR "/root"
CMD ["/bin/bash"]
我将pwd文件夹挂载到" / root"。在我当前的文件夹中,我有一个使用堆栈(funblog)的Haskell项目。我在stack.yml中配置使用" lts-7.20"解析器,旨在安装ghc-8.0.1。
在容器内部,运行"堆栈更新"后,我运行"堆栈设置"但是我得到了#34;系统中打开的文件太多了#34;在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中是否存在构建GHC的问题。
更新2
对于任何希望重现的人(顺便说一下,在MAC OSX上),你可以克隆回购https://github.com/carlosayam/funblog并抓住这个提交9446bc0e52574cc574a9eb5f2733f69e07b874ef
(我可能会继续使用容器的GHC)
答案 0 :(得分:0)
默认情况下,Docker for macOS限制文件描述符的数量,以避免达到macOS系统范围的限制(默认限制为900)。要增加限制,请按照以下命令执行:
$ cd ~/Library/Containers/com.docker.docker/Data/database/
$ git reset --hard
HEAD is now at 9410b78 last-start-time changed at 1480947038
$ cat com.docker.driver.amd64-linux/slirp/max-connections
900
$ echo 1200 > com.docker.driver.amd64-linux/slirp/max-connections
$ git add com.docker.driver.amd64-linux/slirp/max-connections
$ git commit -s -m 'Update the maximum number of connections'
[master 227a248] Update the maximum number of connections
1 file changed, 1 insertion(+), 1 deletion(-)
然后通过以下方式检查通知消息:
$ syslog -k Sender Docker
<Notice>: updating connection limit to 1200
要查看已打开的文件数量,请运行:sysctl kern.num_files
。
要检查当前限制是什么,请运行:sysctl kern.maxfiles
。
要在系统范围内增加它,请运行:sysctl -w kern.maxfiles=20480
。
来源:Containers become unresponsive due to "too many connections"。
另请参阅:Docker: How to increase number of open files limit。
在Linux上,您还可以尝试使用--ulimit
运行Docker,例如
docker run --ulimit nofile=5000:5000 <image-tag>