我設法讓它在這裏運行。我希望我可以運行節點檢查器作爲一個sidekick容器,它會很乾淨(編輯:這是可能的,見答案結束)。不幸的是,查看節點檢查器源代碼時,無法遠程運行節點檢查器(因爲節點檢查器需要訪問文件以便顯示它們),所以即使容器鏈接也不在窗口中。也許它會在某個時候支持它。
這是我的解決方案:
在Dockerfile中,安裝node-inspector。我決定讓它全球化,以便我可以使用相同的容器來調試我的所有應用程序。
RUN npm install -g node-inspector
而是在CMD
命令共進午餐節點,使用bash腳本,可以讓你推出多單進程多。這不是Docker的方式,但正如我所說的,限制在節點檢查器中阻止我們使用sidekick容器。您還可以使用更強大的解決方案進行流程管理,如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。
然後,當你要調試的容器,啓動它就像這樣:
docker run -d -P -p 9080:9080 --env DEBUG=1 --name my_service \
-v /home/docker/sources/.../:/usr/src/app custom-node
現在你只需要點擊調試泊塢窗守護IP,因爲我們暴露在腳本中指定的調試端口(9080)在docker run
命令上。我的Dockerfile已經公開我的主端口,所以我使用了-P
。
如果您的容器在本地虛擬機上運行,並且您設置在代理之後,請確保它支持本地地址或在調試之前禁用它。
編輯:現在與老搭檔容器
這裏是我的節點調試容器的內容Dockerfile
FROM node:4.2.1
EXPOSE 9080
RUN npm install -g node-inspector
CMD ["node-inspector", "--web-port", "9080"]
碼頭工人爲我們提供了2個功能,使它彷彿節點 - 檢查員在節點進程本地運行。
即使節點檢查似乎暗示着你可以告訴你連接到遠程計算機連接到127.0.0.1:8080/?ws=127.0.0.1&port=5858
,我找不到這是解析ws
參數,所以我用泊塢窗淨配置選項的任何代碼彈出與調試過程相同的網絡堆棧中的節點調試容器:--net=container:mysvc
。這樣,節點檢查員可以打開websocket連接to localhost:5858
。
通過使用與調試過程相同的掛載點,您可以將文件局部性僞裝成節點檢查器進程。
現在爲了讓它更方便一些,我建議您使用data container作爲您的應用程序源代碼。
如果您希望在調試中啓動節點,請繼續使用start.sh腳本(儘管刪除節點檢查器命令)。我想知道是否我們可以使用docker的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容器即時調試節點進程。
連接到docker ip並享受您的調試會話!
我使用了'docker logs -f [docker_name]' –
所以@NguyenSyThanhSon你是說你使用日誌來執行簡單的調試嗎? 我希望有一個解決方案,我可以像使用webstorm的正常節點項目那樣設置斷點。 –
在這方面做了一點,認爲我的解決方案非常乾淨。讓我知道你的想法。 –