我试图在Heroku上部署詹金斯基/码头,在编写Dockerfile时遇到了问题。
当我通过heroku container:push web在上推送Docker时,我得到了一个错误Your Docker image must specify a 'CMD' instruction。
但是,要在Heroku的容器中运行Jenkins,我需要写什么命令呢?
提前感谢!
发布于 2017-10-27 12:05:48
该错误指的是您的CMD中缺少的Dockerfile节。
但是,如果您不打算修改jenkins映像的上游版本(如您向Dockerfile提供的链接所反映的那样),则不需要创建自己的坞映像和Dockerfile。
您可以只在本地docker pull jenkins/jenkins:lts,然后使用docker tag jenkins/jenkins:lts registry.heroku.com/<app>/<process-type>标记它,然后使用新的标记docker push registry.heroku.com/<app>/<process-type>将它推到Heroku。
有关此主题,您可以在Heroku的官方文件上阅读更多内容。
编辑:
如果您确实需要一个定制的jenkins映像,例如安装额外的jenkins插件(就像OP需要的那样),那么您最终将创建自己的Dockerfile,您将不得不这样做:
FROM jenkins/jenkins:lts
RUN /usr/local/bin/install-plugins.sh gitlab-plugin publish-over-dropbox
CMD ["--debug=5"]虽然我们在正常环境中不需要它,但我们添加CMD节只是为了通过heroku container:push检查,该检查需要Dockerfile中的CMD节,通过jenkins.sh ENTRYPOINT脚本检测到--debug=5并发送到jenkins.war程序,这反过来又将调试级别设置为5(如果没有指定,则为默认级别),这反过来不会对我们产生任何影响。
编辑2:
由于heroku不接受ENTRYPOINT的多条指令,因此必须进一步偏离正常的Dockerfile场景,取消ENTRYPOINT上游节,将其设置为[],因为它与heroku不兼容,然后将所有内容放在CMD节中:
FROM jenkins/jenkins:lts
RUN /usr/local/bin/install-plugins.sh gitlab-plugin publish-over-dropbox
ENV JAVA_OPTS -Xms256m -Xmx512m
ENTRYPOINT []
CMD /bin/tini -s -- /usr/local/bin/jenkins.sh --httpPort=$PORT由于jenkins和java是内存不足的应用程序,因此我添加了JAVA_OPTS,使其具有免费的层次dyno,并根据需要进行调整。
我将-s标志添加到tini中,因为它不再有PID 1,更详细地介绍了这里。
我添加了发送给--httpPort=$PORT的jenkins.war标志,这样heroku就可以为应用程序填充合适的$PORT。
heroku文档的说明:
入口点是可选的。如果未设置,将使用/bin/sh -c
发布于 2017-10-27 15:57:18
现在,当我试图在Heroku上部署jenkinsci/docker时,我遇到了另一个问题:
2017年-10-27T15:53:37.569477+00: herokuweb.1:状态从崩溃变为启动 2017-10-27T15:53:35.856897+00:00 appapi: Deployed web (dce6a8335a9a)由用户roman.skaskevich@gmail.com 2017-10-27T15:53:35.856897+00:00 appapi: Releasev7由用户roman.skaskevich@gmail.com创建 2017-10-27T15:53:53.949433+00:00 herokuweb.1:用命令启动进程‘-调试\=5’ 2017-10-27T15:53:56.142034+00:00附录1:错误:没有这样的文件或目录 2017年-10-27T15:53:56.243216+00: herokuweb.1:状态从开始变为崩溃 2017-10-27T15:53:56.228817+00:00herokuweb.1:状态126退出的进程
https://stackoverflow.com/questions/46974251
复制相似问题