2017-10-09 5 views
2

コンテナが稼動しているdynoがある場合、docker exec -it blarg /bin/bashのHerokuに相当するものは何ですか?つまり、すでに実行中のコンテナにシェルをどのように開くことができますか?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。ドキュメントごとに、bashcurlopenssh、およびpythonが存在することを確認しながら、自分の選択したベースイメージを使用しようとしました。上記の例に示すように、私はHeroku-16ベースイメージを使ってみました。

(私はこれらの手順を適用していないプライベートスペースを使用していないので、リンクのドキュメントにもプライベート空間に必要な手順を参照。)。

答えて

2

TLを可能にするための命令でexecのマニュアルを参照してくださいすることができます; DRはbashがイメージにインストールされていることを確認し、あなたのDockerfileにこれを追加します。

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

説明

反して何012へは信じられなくなる可能性があります。Herokuは、Dynoで既に動作しているDockerコンテナにheroku ps:execをサポートしていません。

当社のPS:私はHerokuのチームから受け取った応答から引用

のexec機能は...働く... dynosにbashのファイルを注入することにより、 バックグラウンドで追加のポートを開いて、 に接続することができます。

[T]デフォルトで Dockerで使用されるシェルは/ bin/shで、 Heroku Execスクリプト(/ bin/bashが必要です)と互換性がありません。

ただし、あなたが使用できる回避策があります。あなたの Dockerfileに次のように入れてください:

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

これは間違いなく 当社製品のギャップであり、我々はこれを改善するために動作します。

+0

単に 'sh'を' bash'へのシンボリックリンクで置き換えても驚いています。 'sh'として呼び出された場合、' bash'は、 'プロセス置換'(https:///)をサポートしていないposix準拠モード(https://manpages.debian.org/stretch/bash/bash.1.en.html) /www.gnu.org/software/bash/manual/html_node/Process-Substitution.html)。 'heroku-exec.sh'はプロセス置換(' ... <(curl ...) ')を使います。 '$ rm/bin/sh && ln -s/bin/bash/bin/sh'を試してください。$/bin/sh/c "cat <(echo 1)" ' – wwerner

+0

heroku-execスクリプトに' set + o posix'を追加すると助けになります。 – wwerner

1

編集: Herokuのpsを実行するには:上のexec Dockerを使ってアプリケーションをコンテナレジストリ経由で展開する場合は、runtime-heroku-execを有効にする必要があります。 あなたはそれを

Hereを有効にするには、heroku features:enable runtime-heroku-execを行うことができますが、ドッキングウィンドウのサポートに

+0

私はそれをすべて試しました。サイコロはありません。私が質問に追加した例を見てください。この例とは異なる結果が得られますか?例が何か不足していますか? – kkurian

+0

現在のところ、ドキュメントは誤解を招くようなものです。私の答えを見てください。 – kkurian

関連する問題