给定一个容器运行的dyno,Heroku相当于docker exec -it blarg /bin/bash什么?也就是说,如何在已经运行的容器中打开shell?
示例Dockerfile:
FROM heroku/heroku:16
CMD while true; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)
示例运行:
$ heroku container:push my_app
<wait a minute>
$ heroku ps
=== my_app (Free): /bin/sh -c while\ true\;\ do\ sleep\ 1\;\ done (1)
my_app.1: up 2017/10/09 12:13:07 -0600 (~ 4m ago)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
但现在...
$ heroku ps:exec --dyno=my_app.1
Establishing credentials... error
? Could not connect to dyno!
? Check if the dyno is running with `heroku ps'
Run Code Online (Sandbox Code Playgroud)
为了更好的衡量,我heroku ps在这一点检查,它表明dyno仍然在运行.
是的,我已经完成了Heroku建议启用Docker支持的所有功能.每文档,我已经用我选择的基本图像,同时确保试过bash,curl,openssh,和python是存在的.我也尝试过使用Heroku-16基本图像,如上例所示.
(链接文档还引用了私有空间所需的步骤.由于我没有使用私有空间,所以我没有应用这些步骤.)
TL; DR确保bash已在映像中安装并将其添加到Dockerfile:
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
Run Code Online (Sandbox Code Playgroud)
说明
与文档引导人们相信的相反,Heroku没有开箱即用支持heroku ps:exec已经在dyno中运行的Docker容器.
引自Heroku团队的回复:
我们的ps:exec功能...有效...通过将一个bash文件注入dynos,在后台打开一个额外的端口,并允许你连接到它.
[T] Docker使用的默认shell是/ bin/sh,它与Heroku Exec脚本不兼容(它需要/ bin/bash).
您可以使用一种解决方法.将以下内容放入Dockerfile:
RUN rm /bin/sh && ln -s /bin/bash /bin/sh这绝对是我们产品的一个缺口,我们将努力做到更好.
如果安装了 bash,请运行heroku run bash. 这将使您从命令行进入 shell。
您还可以使用 GUI 并在您的 heroku 应用程序上转到“更多”->“运行控制台”,然后输入“bash”以将其调出。
| 归档时间: |
|
| 查看次数: |
2179 次 |
| 最近记录: |