2015-02-14 29 views
21

Tôi đã tìm thấy Google cung cấp một số nguyên tắc về how to run Nodejs on a custom runtime environment. Tất cả mọi thứ có vẻ tốt và tôi đang quản lý để bắt đầu ứng dụng Nodejs của tôi trên máy địa phương đang chạy gcloud preview app run ..
Như tôi thấy, nó có lẽ tạo vùng chứa Docker và chạy chương trình Nodejs trong đó. Tôi đang nói "có lẽ", bởi vì đây là trải nghiệm đầu tiên của tôi với Docker, tuy nhiên tôi đã có hơn 2 năm kinh nghiệm phát triển Nodejs.Cách gỡ lỗi ứng dụng Nodejs chạy bên trong vùng chứa Docker qua Google Cloud

Vì vậy, câu hỏi của tôi là cách gỡ lỗi (với điểm ngắt dừng) chương trình Nodej của tôi khi nó đang chạy bên trong vùng chứa Docker? Sử dụng Công cụ dành cho nhà phát triển Chrome hoặc cách tôi có thể thiết lập cấu hình gỡ lỗi Webstorm để làm cho nó dừng lại trên các điểm ngắt. Có thể cấu hình Docker về cách nó bắt đầu nút hoặc thậm chí bắt đầu Docker qua gcloud bên trong Webstorm để đảm bảo gỡ lỗi đang hoạt động không? Mọi trợ giúp hoặc giải thích đều được đánh giá cao.

Vui lòng không cung cấp câu trả lời về cách gỡ lỗi ứng dụng Nodejs bên ngoài vùng chứa Docker - Tôi biết cách thực hiện điều đó rất tốt.

Trả lời

11

Tôi xin lỗi, nhưng tôi chỉ biết một giải pháp với nút-thanh tra, tôi hy vọng nó có thể giúp bạn:

  • Bạn có thể cài đặt gói nút-thanh tra bên trong thùng chứa của bạn: https://github.com/node-inspector/node-inspector
  • xạ cổng 8080 của container của bạn trên máy chủ của bạn (chạy bạn container với tham số -p 8080: 8080)
  • Run này bên trong container của bạn (với Docker exec, hoặc Docker nhập)

    nút-debug --web-host 0.0.0.0 yourScript.js

  • Đến http://localhost:8080/debug?port=5858

+1

Xác nhận rằng tôi đã có thể bắt đầu phiên gỡ lỗi bằng chrome, sử dụng Docker for Mac, sử dụng 5858: 5858 trong phần cổng của trình tạo docker của tôi. Sử dụng chế độ mạng docker mặc định. Không cần cho --net = host, chuyển tiếp SSH hoặc bất kỳ thủ thuật nào khác. Đây là Docker theo cách nó có nghĩa là (cô lập). Ngoài ra, '--web-host 0.0.0.0', không được đề cập ở khắp mọi nơi, là phần còn thiếu trong cấu hình của tôi. Nếu không có nút gỡ lỗi bắt đầu, nhưng không có gì có thể kết nối với nó từ bên ngoài (kết nối bị từ chối). Với nó "nó chỉ hoạt động" –

+0

Có một thời gian trễ khá dài giữa bộ kiểm tra nút khởi động và các tệp tải vào nguồn trong trình duyệt. Bất kỳ ý tưởng tại sao đó là? – Jeremy

+0

gỡ lỗi nút không được chấp nhận, hãy xem https://github.com/node-inspector/node-inspector – Gerd

8

Có một cách dễ dàng hơn, ít nhất là từ Docker 0.11 hoặc một cái gì đó.

Chỉ chạy trên máy phát triển của bạn, Docker with --net = "host". Điều này làm cho Docker liên kết trực tiếp với localhost và không tạo adapter mạng cầu nối, vì vậy máy Docker chạy giống như bất kỳ quá trình nào khác trên máy của bạn và mở các cổng cần trên giao diện cục bộ.

Bằng cách này, bạn có thể kết nối với cổng gỡ lỗi của mình như thể Node không chạy trong Docker.

Nhiều tài liệu ở đây: https://docs.docker.com/reference/run/

Trước Docker 0.11 bạn có hai cách khác để gỡ lỗi, ngoài việc sử dụng nút-Thanh tra:

  • Run sshd bên trong máy Docker của bạn và thiết lập một đường hầm ssh, như nếu bạn đã gỡ lỗi trên máy từ xa.
  • "Lộn xộn" với các bảng ip để "hoàn nguyên" bản đồ Docker của các cổng cục bộ. Có một cái gì đó về nó ở đây Exposing a port on a live Docker container.
0

Theo như tôi thấy, bạn cần cung cấp tham số --debug-brk = đến nút khi khởi động - điều này sẽ cho phép gỡ lỗi. Sau đó, truy cập vào cổng được chỉ định trên vùng chứa docker của bạn.Bạn có thể phải vạch trần nó hoặc đường hầm (sử dụng ssh).

Sau đó, trỏ trình gỡ lỗi từ xa Webstorm vào cổng được chỉ định và bạn nên đặt.

0

Nếu bạn đang sử dụng cây cầu kết nối mạng cho container của bạn, và bạn không muốn cài đặt nút-thanh tra bên trong thùng chứa tương tự như quá trình nút của bạn, tôi đã tìm thấy đây là một giải pháp tiện lợi:

  • Trong container Node.js chính, bản đồ cổng 5858 đến host
  • Run quá trình nút chính với debug kích hoạt
  • Sử dụng một container riêng biệt để chạy node-Thanh tra
  • Sử dụng máy chủ mạng cho container nút-thanh tra

Điều này nói rằng, vùng chứa bộ kiểm tra nút sẽ kết nối với máy chủ cục bộ: 5858, sau đó sẽ được ánh xạ cổng qua vùng chứa nút chính.

Nếu bạn đang chạy trên một máy ảo nào, tôi muốn sau đó khuyên:

  • Hãy chắc chắn rằng cổng 5900 không tiếp xúc công khai (ví dụ bằng các bức tường lửa)
  • Hãy chắc chắn rằng nút Thanh tra cổng (ví dụ 8080) chúng tôi tiếp xúc công khai, vì vậy bạn có thể kết nối đến nó

tôi đã viết một vài chi tiết về nó ở đây: https://keylocation.sg/our-tech/debugging-nodejs-in-docker-using-node-inspector

Các vấn đề liên quan