2017-10-09 56 views
2

給定一個集裝箱正在運行的測功機,什麼是相當於docker exec -it blarg /bin/bash的Heroku?也就是說,如何將shell打開到已經運行的容器中?Shell運行在Heroku dyno上的Docker容器。怎麼樣?

例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建議的所有事情to enable Docker support。根據文檔,我嘗試使用我選擇的基本映像,同時確保存在bashcurl,和python。我也嘗試使用Heroku-16基本圖像,如上例所示。

(鏈接的文檔還引用了私人地點所需的步驟由於我沒有使用私人地點我沒有應用這些步驟。)

回答

2

TL; DR確保bash安裝在圖像中添加到您的Dockerfile:

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

說明

相反的是the documentation會導致人們相信,Heroku並不支持將heroku ps:exec支持到已經運行在測試中的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

這絕對是 我們的產品有差距,我們將努力使這個更好。

+0

如果僅僅用'bash'的符號鏈接替換'sh',我會感到驚訝。如果作爲'sh'被調用,'bash'進入一個posix兼容模式(https://manpages.debian.org/stretch/bash/bash.1.en.html),它不支持'進程替換'(https:///www.gnu.org/software/bash/manual/html_node/Process-Substitution.html)。 'heroku-exec.sh'使用進程替換('... <(curl ...)')。 '$/bin/bash -c「cat <(echo 1)」' '$/bin/sh - '$ rm/bin/sh && ln -s/bin/c「cat <(echo 1)」' – wwerner

+0

在heroku-exec腳本中添加'set + o posix'可能會有所幫助。 – wwerner

1

編輯: 爲了運行的Heroku PS:EXEC上應用程序與Docker和部署通過容器註冊表,你必須啓用runtime-heroku-exec。 你可以做heroku features:enable runtime-heroku-exec,使其能夠

Here你可以看到exec的文檔以說明啓用搬運工支持

+0

我已經嘗試過所有這些。沒有骰子。看到我已經添加到問題的例子。你會從這個例子中得到不同的結果嗎?這個例子是否缺少了什麼? – kkurian

+0

截至目前,文件是誤導性的。看到我的答案。 – kkurian

相關問題