私はここでそれを実行することができた。私は、サイドキックのコンテナとしてノードインスペクタを実行することができたら、それはとてもきれいだろう(編集:それは可能です、答えの最後を参照してください)。残念ながら、ノードインスペクタのソースを調べると、ノードインスペクタをリモートで実行することはできません(ノードインスペクタはファイルを表示できるようにファイルにアクセスする必要があるため)。おそらくそれはある時点でそれをサポートするでしょう。
ここにありますが、私のソリューションです:Dockerfileで
、ノード・インスペクタをインストールします。私はすべての私のアプリをデバッグするために同じコンテナを使用することができるようにグローバルにすることにしました。
RUN npm install -g node-inspector
代わりのCMD
コマンドでノードをlunching、あなたは、単一のプロセスよりも起動できるようになるbashスクリプトを使用します。これはDockerの方法ではありませんが、私が述べたように、ノードインスペクタでの制限は、サイドキーコンテナの使用を防ぎます。 supervisorのようなプロセス管理のためのより堅牢なソリューションを使用することもできますが、単純なスクリプトをデバッグするには十分です。
CMD ["/bin/bash", "start.sh"]
このスクリプトは、ノードを起動してデバッグを有効にするDEBUG
環境変数の存在をチェックします。
#!/bin/bash
if [ -z ${DEBUG+x} ]; then
node server.js
else
node-inspector --web-port 9080 &
node --debug server.js
fi
同じトリックを使用してノードインスペクタをインストールしても、インストールしなくてもかまいません。インストールのためにスクリプトをスキップしたい場合はconditional statement in RUN commandにすることもできます。あなたは、コンテナをデバッグしたいとき
次に、そのようにそれを起動します。我々は、スクリプト(9080)で指定されたデバッグポートを公開するので
docker run -d -P -p 9080:9080 --env DEBUG=1 --name my_service \
-v /home/docker/sources/.../:/usr/src/app custom-node
は今、あなただけのデバッグのためのドッキングウィンドウデーモンのIPをヒットする必要がありますdocker run
コマンドを使用します。私のDockerfileはすでに私のメインポートを公開していますので、私は-P
を使っています。
コンテナがローカルVM上で動作し、プロキシの背後に設定されている場合は、ローカルアドレスをサポートするか、デバッグする前に無効にするかを確認してください。
EDIT:今相棒コンテナと
に動作します。ここだ、私のノード・デバッグ・コンテナの内容ですDockerfile
ドッカーは、リンパ節転移かのようにそれを作るために私たち2つの機能を提供し
FROM node:4.2.1
EXPOSE 9080
RUN npm install -g node-inspector
CMD ["node-inspector", "--web-port", "9080"]
インスペクタはノードプロセスでローカルに実行されていました。
ノード-検査官はあなたが127.0.0.1:8080/?ws=127.0.0.1&port=5858
に接続するためにあなたを伝えることで、リモートマシンに接続することができますを意味するように見えても、私はws
パラメータを解析して任意のコードを見つけることができませんでしたので、私はにドッキングウィンドウのネット設定オプションを使用デバッグされたプロセスと同じネットワークスタックのnode-debugコンテナをポップしてください:--net=container:mysvc
。この方法で、ノードインスペクタはWebソケット接続to localhost:5858
を開くことができます。ノード・インスペクター・プロセスに同じことができます、あなたのデバッグプロセスとしてマウントポイントを偽のファイルの局所性を利用することにより
。
もう少し便利になるように、私はあなたのアプリソースにdata containerを使用することをお勧めします。
デバッグ中かどうかのノードを開始する可能性がしたい場合は、start.shスクリプトを使用(ただしノードインスペクタコマンドを削除)し続けます。私たちはいえドッキングウィンドウでsignalを使用することができれば、それは完全にstart.shの依存を取り除くでしょうか。
if [ -z ${DEBUG+x} ]; then
node server.js
else
node --debug server.js
fi
ので、データコンテナを作成:
docker create -v /home/docker/sources/.../:/usr/src/app \
--name my_service-src custom-node /bin/true
起動ノードのアプリを、ノード・インスペクタデバッグポートを公開:
docker run -d -P -p 9080:9080 --env DEBUG=1 --name my_service \
--volumes-from my_service-src custom-node
起動ノード・デバッグコンテナ:
docker run -d --net=container:my_service --volumes-from my_service-src \
--name node-debug node-debug
この方法では、すぐにnをスポーンすることができますode-debugコンテナをオンザフライで実行して、ノードプロセスをデバッグします。
コネクトIPをドッキングウィンドウとデバッグセッションを楽しむために!
'docker logs -f [docker_name]'を使用しました –
@NguyenSyThanhSonはログを使って、必要に応じてログアウトして単純なデバッグを実行すると言っていますか? 私は、Webstormを使って通常のノードプロジェクトでできるように、私がブレークポイントを設定できる解決策を望んでいました。 –
少しこれに取り組んで、私のソリューションはかなりきれいだと思います。どう考えているか教えてください。 –