把Shell放到一个运行在Heroku dyno上的Docker容器中。 怎么样?

给定一个容器运行的测功机, docker exec -it blarg /bin/bash的Heroku是什么? 也就是说,如何将一个shell打开到已经运行的容器中呢?

示例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 ,它表明,测功机仍在运行。

是的,我已经完成了Herokubuild议启用Docker支持的所有事情。 根据文档,我已经尝试使用我select的基本映像,同时确保bashcurlopensshpython存在。 我也尝试过使用Heroku-16基本镜像,如上例所示。

(链接的文档也引用了Private Spaces所需的步骤,因为我没有使用Private Spaces,所以我没有应用这些步骤。)

编辑 :为了在Docker上运行heroku ps:exec,并通过Container Registry进行部署,您必须启用runtime-heroku-exec 。 你可以做heroku features:enable runtime-heroku-exec来启用它

在这里你可以看到exec的文档和说明来启用docker的支持

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

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

说明

与文档会导致人们相信的相反,Heroku并不支持将Heroku heroku ps:exec支持到已经运行在testing版中的Docker容器中。

从Heroku团队收到的回复中引用:

我们的ps:execfunction…通过向dynos注入一个bash文件,在后台打开一个额外的端口,并允许您连接到它。

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

有一个解决方法,你可以使用。 把下面的代码放到你的Dockerfile中:

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

这绝对是我们产品的一个缺口,我们会努力做到这一点。