Lỗi Failed to launch/connect to browser: Failed to launch the browser process!
Failed to launch/connect to browser: Failed to launch the browser process!
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
[748:748:0423/042036.690017:FATAL:zygote_host_impl_linux.cc(211)] Check failed: . : Operation not permitted (1)
[0423/042036.730173:WARNING:process_reader_linux.cc(95)] sched_getscheduler: Function not implemented (38)
[0423/042036.730779:WARNING:process_reader_linux.cc(95)] sched_getscheduler: Function not implemented (38)
TROUBLESHOOTING: https://pptr.dev/troubleshooting
Lỗi bạn đang gặp phải khi sử dụng node Puppeteer trong n8n (phiên bản tự host 1.88.0) cho thấy rằng trình duyệt Chromium mà Puppeteer cố gắng khởi chạy đã không thành công.
Nguyên nhân cốt lõi được chỉ ra trong các dòng thông báo lỗi:
Failed to launch/connect to browser: Failed to launch the browser process!
: Thông báo chung rằng không khởi chạy được trình duyệt.Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
: Đây là điểm mấu chốt. Chromium cố gắng sử dụng các "namespaces" của Linux để tạo ra một môi trường biệt lập (sandbox) nhằm tăng cường bảo mật. Lỗi này nói rằng mặc dù hệ thống hỗ trợ các loại namespace cần thiết (PID, Network), nhưng tiến trình đã bị từ chối quyền (Operation not permitted
) để thực hiện việc này.[748:748:0423/042036.690017:FATAL:zygote_host_impl_linux.cc(211)] Check failed: . : Operation not permitted (1)
: Lỗi cấp thấp từ Chromium xác nhận lại vấn đề về quyền hạn khi khởi tạo tiến trình Zygote (một phần quan trọng trong kiến trúc của Chrome/Chromium).[WARNING:process_reader_linux.cc(95)] sched_getscheduler: Function not implemented (38)
: Các cảnh báo này có thể liên quan hoặc là hệ quả phụ, cho thấy một số chức năng hệ thống mà Chromium mong đợi không được triển khai hoặc không có sẵn trong môi trường của bạn, có thể liên quan đến cơ chế sandbox.
Tóm lại: Lỗi này thường xảy ra khi Puppeteer (và Chromium bên dưới) được chạy trong một môi trường bị hạn chế quyền, phổ biến nhất là bên trong một container Docker mà không có các đặc quyền cần thiết hoặc khi người dùng chạy tiến trình n8n không đủ quyền trên hệ thống Linux. Cơ chế sandbox bảo mật của Chromium yêu cầu các quyền đặc biệt mà môi trường hiện tại không cung cấp.
Cách khắc phục phổ biến nhất:
-
Tắt chế độ Sandbox của Chromium (Giải pháp thường dùng nhất):
- Bạn có thể yêu cầu Puppeteer khởi chạy Chromium mà không cần sandbox bằng cách thêm tham số
--no-sandbox
. - Cách thực hiện trong n8n: Trong cấu hình của node Puppeteer, tìm đến mục Options > Launch Arguments. Trong trường Arguments, thêm dòng sau:
--no-sandbox
- Nếu đã có các tham số khác, hãy thêm
--no-sandbox
vào danh sách, mỗi tham số trên một dòng hoặc cách nhau bằng dấu phẩy tùy thuộc vào giao diện của node (thường là mỗi cái trên một dòng mới trong ô Arguments). - Lưu ý: Tắt sandbox sẽ làm giảm mức độ bảo mật của trình duyệt, vì các trang web độc hại tiềm ẩn có thể ảnh hưởng đến hệ thống chạy n8n dễ dàng hơn. Chỉ nên sử dụng tùy chọn này nếu bạn tin tưởng các trang web mà bạn đang truy cập bằng Puppeteer hoặc nếu bạn chấp nhận rủi ro này.
- Bạn có thể yêu cầu Puppeteer khởi chạy Chromium mà không cần sandbox bằng cách thêm tham số
-
Nếu chạy n8n trong Docker:
- Bạn cần cấp thêm quyền cho container khi khởi chạy nó. Các cách phổ biến bao gồm:
- Thêm cờ
--cap-add=SYS_ADMIN
vào lệnhdocker run
. Cờ này cấp nhiều quyền hệ thống, nhưng cũng tiềm ẩn rủi ro bảo mật. - Thử thêm cờ
--security-opt seccomp=unconfined
.
- Thêm cờ
- Tham khảo tài liệu của Puppeteer (liên kết trong lỗi:
https://pptr.dev/troubleshooting
) để biết các cấu hình Docker được đề xuất khác.
- Bạn cần cấp thêm quyền cho container khi khởi chạy nó. Các cách phổ biến bao gồm:
-
Đảm bảo cài đặt đủ thư viện phụ thuộc: Mặc dù lỗi không trực tiếp chỉ ra thiếu thư viện, đôi khi việc thiếu các gói cần thiết cho Chromium trên hệ thống Linux cũng có thể gây ra lỗi khởi chạy gián tiếp. Hãy đảm bảo bạn đã cài đặt đầy đủ các thư viện được liệt kê trong tài liệu của Puppeteer.
Khuyến nghị:
Bắt đầu bằng cách thử giải pháp 1 (thêm --no-sandbox
) vì đây là cách đơn giản và hiệu quả nhất trong nhiều trường hợp, đặc biệt là khi chạy trong các môi trường container hóa. Nếu cách này hoạt động, hãy cân nhắc các rủi ro bảo mật. Nếu bạn đang dùng Docker và muốn bảo mật hơn, hãy nghiên cứu kỹ các tùy chọn trong giải pháp 2.