装入运行在Heroku dyno上的Docker容器中怎么样?

问题描述

TL; DR确保bash已安装在映像中,并将其添加到您的Dockerfile中:

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

文档令人信服的相反,Heroku不支持现成heroku ps:exec在dyno中运行的Docker容器。

引用我从Heroku小组收到的回复:

我们的ps:exec功能…通过将bash文件注入dynos,在后台打开另一个端口,并允许您连接到它,从而起作用。

Docker使用的默认shell是/ bin / sh,它与Heroku Exec脚本不兼容(需要/ bin / bash)。

您可以使用一种解决方法。将以下内容放入您的Dockerfile中:

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

这绝对是我们产品中的一个空白,我们将努力使它变得更好。

解决方法

给定一个在其中运行容器的dyno,Heroku等价于docker exec -it blarg /bin/bash什么?就是说,一个人怎么能在已经运行的容器中打开一个外壳?

Dockerfile示例:

FROM heroku/heroku:16
CMD while true; do sleep 1; done

示例运行:

$ 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)

到目前为止,一切都很好。

但现在…

$ heroku ps:exec --dyno=my_app.1
Establishing credentials... error
 ▸    Could not connect to dyno!
 ▸    Check if the dyno is running with `heroku ps'

从好的方面来说,我检查heroku ps了这一点,它表明测功机仍在运行。

是的,我已经完成了Heroku建议的所有支持Docker支持的工作。每文档,我已经用我选择的基本图像,同时确保试过bashcurlopenssh,和python是存在的。我还尝试使用Heroku-16基本图像,如上面的示例所示。

(链接的文档还引用了私有空间所需的步骤。由于我没有使用私有空间,因此我没有应用这些步骤。)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...