我正在尝试创建一个基于Docker 7的CentOS容器,它将托管R、shiny-server和rstudio-server,但我需要有systemd才能启动服务。我可以使用启用了systemd的centos映像作为基础,但随后需要在特权模式下运行容器,并允许访问主机上的/sys/fs/cgroup。我可能能够容忍不太安全的情况,但我不能与在Windows或Mac上运行Docker的用户共享容器。
我发现了这个问题,但它已经存在两年了,而且似乎没有任何解决方案。
任何建议或选择都是值得感谢的。
更新:成功!
我发现:对于shiny-server,我只需要从命令行使用适当的参数执行shiny-server。我捕获了对脚本文件的适当调用,并使用Dockerfile中的最后一行CMD进行调用。
rstudio-server更加棘手。首先,我需要安装initscripts以获得适当的依赖关系,以便一些rstudio脚本能够工作。在此之后,执行rstudio-server start实际上不会做任何事情,也不会提供任何错误。我通过各种链接跟踪调用,发现自己在/usr/lib/rstudio-server/bin/rstudio-server中。daemonCmd()函数测试cat /proc/1/comm以确定如何启动服务器。由于某种原因,它失败了,但看一下脚本,似乎很清楚它需要执行/etc/init.d/rstudio-server start。如果我手动或在Docker CMD行中这样做,它似乎可以工作。
我将这两个CMD行需求放入一个sh脚本中,该脚本可从Dockerfile中的CMD行调用。
这是一个小技巧,但还不错。我很高兴听到任何其他的建议。
发布于 2017-04-05 03:14:01
您不一定需要使用像systemd这样的init系统。
从本质上讲,您需要启动多个服务,这方面有一些现有的模式。请查看此页面,了解如何使用supervisord实现相同的功能:https://docs.docker.com/engine/admin/using_supervisord/
https://stackoverflow.com/questions/43212291
复制相似问题