我试过使用dumb-init,gosu和exec的很多组合,但没有成功.
情况如下:
>当我尝试使用命令docker run -d -v $local / vol / bldbot / master:/ var / lib / buildbot buildbot-master-test运行deamonized buildroot时,容器成功启动,但它突然终止.日志如下所示:
[timestamp] [ – ]日志已打开.
[timestamp] [ – ] twistd 16.0.0(/usr/bin/python 2.7.12)启动.
[timestamp] [ – ] reactor类:twisted.internet.epollreactor.EPollReactor.
[timestamp] [ – ]启动BuildMaster – buildbot.version:0.9.2
[timestamp] [ – ]从’/var/lib/buildbot/master.cfg’加载配置
[timestamp] [ – ]使用URL“sqlite:/state.sqlite”设置数据库
[timestamp] [ – ]将数据库日志模式设置为’wal’
[时间戳] [ – ]为主人做家务1 c8aa8b0d5ca3:/ var / lib / buildbot
[timestamp] [ – ]添加1个新的更改源,删除0
[timestamp] [ – ]添加1个新构建器,删除0
[timestamp] [ – ]添加2个新调度程序,删除0
[timestamp] [ – ]此主服务器上未配置Web服务器
[timestamp] [ – ]添加1个新工人,删除0
[timestamp] [ – ] PBServerFactory从9989开始
[时间戳] [ – ]开始工厂
[timestamp] [ – ] BuildMaster正在运行
>当我使用命令docker以交互模式运行容器时运行–rm -it -v $local / vol / bldbot / master:/ var / lib / buildbot buildbot-master-test / bin / sh然后我运行命令buildbot start就像魅力一样.
我已经研究过官方buildbot主docker镜像的内容,即buildbot / buildbot-master.我看到作者决定在start_buildbot.sh中使用命令exec twistd -ny $B / buildbot.tac,而不是他们自己的buildbot启动.
所以问题是,如何在仅运行buildbot start的Dockerfile中编写ENTRYPOINT / CMD指令.
附录1
Dockerfile内容
FROM alpine:3.4ENV BASE_DIR=/var/lib/buildbot SRC_DIR=/usr/src/buildbotcopY start $SRC_DIR/RUN \ echo @testing http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositorIEs && \ echo @community http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositorIEs && \ apk add --no-cache \ python \ py-pip \ py-twisted \ py-cffi \ py-cryptography@community \ py-service_IDentity@community \ py-sqlalchemy@community \ gosu@testing \ dumb-init@community \ py-jinja2 \ tar \ curl && \# install pip dependencIEs pip install --upgrade pip setuptools && \ pip install "buildbot" && \ rm -r /root/.cacheworkdir $BASE_DIRRUN \ adduser -D -s /bin/sh bldbotmaster && \ chown bldbotmaster:bldbotmaster .VolUME $BASE_DIRCMD ["dumb-init","/usr/src/buildbot/start","buildbot","master"]
附录2
启动脚本内容
#!/bin/shset -eBASE_DIR=/var/lib/buildbotif [[ "" = 'buildbot' && "" = 'master' ]]; then if [ -z "$(ls -A "$BASE_DIR/master.cfg" 2> /dev/null)" ]; then gosu bldbotmaster buildbot create-master -r $BASE_DIR gosu bldbotmaster cp $BASE_DIR/master.cfg.sample $BASE_DIR/master.cfg fi exec gosu bldbotmaster buildbot start $BASE_DIRfiexec "$@"解决方法 Buildbot引导程序基于Twisted的“.tac”文件,预计将使用twistd -y buildbot.tac启动.
buildbot启动脚本实际上只是扭曲的一个方便包装器.它实际上只是运行twistd,然后监视日志以确认buildbot成功启动.在此日志监视之外没有任何增值,因此使用buildbot start启动buildbot并非严格要求.
你可以用twistd -y buildbot.tac来启动它.
当你指出官方docker镜像正在使用twistd -ny buildbot.tac启动buildbot
如果你看看twistd的帮助,-y意味着Twisted守护进程将运行.tac文件,-n表示它不会进行守护进程.
这是因为docker正在自己进行进程监视,并且不希望其入口点进行守护进程.
buildbot start命令也有一个–nodaemon选项,它实际上只是’exec’到twistd -ny.
所以对于你的dockerfile,你也可以使用twistd -ny或buildbot start –nodaemon,这将是相同的.
另一个Docker具体是buildbot.tac是不同的.它将twistd日志配置为输出到stdout而不是输出到twisted.log.这是因为docker设计期望日志在stdout中,因此您可以独立于应用程序的技术配置任何花哨的云日志转发器.
总结以上是内存溢出为你收集整理的linux – Daemonized buildbot start全部内容,希望文章能够帮你解决linux – Daemonized buildbot start所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)