给定一个在其中运行容器的dyno,Heroku等价于docker exec -it blarg /bin/bash什么?就是说,一个人怎么能在已经运行的容器中打开一个外壳?
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 ps
是的,我已经完成了Heroku建议的所有支持Docker支持的工作。每文档,我已经用我选择的基本图像,同时确保试过bash,curl,openssh,和python是存在的。我还尝试使用Heroku-16基本图像,如上面的示例所示。
bash
curl
openssh
python
(链接的文档还引用了私有空间所需的步骤。由于我没有使用私有空间,因此我没有应用这些步骤。)
TL; DR确保bash已安装在映像中,并将其添加到您的Dockerfile中:
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
说明
与文档令人信服的相反,Heroku不支持现成heroku ps:exec在dyno中运行的Docker容器。
heroku ps:exec
引用我从Heroku小组收到的回复:
我们的ps:exec功能…通过将bash文件注入dynos,在后台打开另一个端口,并允许您连接到它,从而起作用。 Docker使用的默认shell是/ bin / sh,它与Heroku Exec脚本不兼容(需要/ bin / bash)。 您可以使用一种解决方法。将以下内容放入您的Dockerfile中: RUN rm /bin/sh && ln -s /bin/bash /bin/sh 这绝对是我们产品中的一个空白,我们将努力使它变得更好。
我们的ps:exec功能…通过将bash文件注入dynos,在后台打开另一个端口,并允许您连接到它,从而起作用。
Docker使用的默认shell是/ bin / sh,它与Heroku Exec脚本不兼容(需要/ bin / bash)。
您可以使用一种解决方法。将以下内容放入您的Dockerfile中:
这绝对是我们产品中的一个空白,我们将努力使它变得更好。