Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Máy Ảo

Chạy Docker bên trong LXD: Hướng dẫn từng bước

Chào mừng đến với Arcane Weekly. Hôm nay, tôi muốn nói với bạn về một vấn đề bạn khônglikely gặp phải, nhưng nếu gặp, bạn sẽ muốn một giải pháp nhanh gọn. Công cụ: LXD container, Docker. Nhiệm vụ: Bạn muốn chạy cả hai cùng lúc. Cụ thể hơn, bạn muốn spawn một LXD container, và bên trong nó, khởi động một Docker container. Tại sao? Tại sao không.

Vấn đề bạn gặp là sau. Docker execution fail với lỗi sau: docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "proc" to rootfs at "/proc" caused: permission denied: unknown. Đống text kia. Hãy debug xem sao.

Vấn đề chi tiết hơn

Bình thường, khi chạy Docker container, bạn không nên gặp vấn đề truy cập /proc. Nhưng lỗi trên cho thấy điều này không thể. Thông báo khá gây nhầm lẫn, vì nó chứa nhiều thông tin, tạo ra dấu vết sai lệch. Thực sự, có thể hàng tá lý do khiến bạn gặp vấn đề. Trong trường hợp của tôi, setup hoàn toàn mới, vanilla, không có tùy chỉnh điên rồ. Không có lỗi khác, và về mặt thực tế, Docker đã được cài đặt và cấu hình đúng.

Sau đó tôi nghĩ, có lẽ tôi nên xem LXD làm việc như thế nào, và có lẽ điều này sẽ cho tôi hiểu rõ hơn tại sao tôi gặp vấn đề này. Thật vậy, tôi sớm tìm thấy một bài viết cũ, bán tài liệu về LXD, giải thích tình huống. Vì lý do bảo mật, container không được phép truy cập /proc và /sys theo cách không an toàn. Workaround cho việc này - với các implication bảo mật liên quan - là cho phép truy cập như vậy.

Giải pháp

Điều bạn cần làm là cho phép nesting cho container bị ảnh hưởng.

lxc launch "image" "container name" -c security.nesting=true

Nếu container đã tồn tại, thì trước khi start nó:

lxc config set "container name" security.nesting true

Và sau đó start container:

lxc start "container name"

Nếu nó đang chạy, stop container, set policy, sau đó start lại. Thao tác này non-destructive, nên nếu bạn gặp vấn đề chỉ sau khi đã spawn container, bạn sẽ không mất công việc hay dữ liệu bên trong. Setting cũng hoàn toàn reversible. Và xong việc, các anh em ơi.

Kết luận

Thú vị thấy tôi chỉ mới gặp vấn đề tồn tại khoảng 5 năm nay. Hoặc rằng nhiều người gặp vấn đề này, mà thông tin lại thưa thớt và rải rác. Vâng, nếu bạn đi theo nested container, bạn muốn chỉnh security policy cho container bị ảnh hưởng trong LXD. Đây là một thủ thuật khá đơn giản. Còn nhiều thứ khác, như khái niệm privileged và unprivileged container, và các考量 bảo mật khác. Nhưng nếu công việc của bạn không về bảo mật, không có downside nào cho thay đổi này.

Tài liệu tốt hơn sẽ giúp. Thông báo lỗi ít загадоリック hơn cũng tốt. Trong lúc chờ đợi, hãy thử nghĩ tại sao, trong setup của bạn, có thể có lỗi permission cho điều bạn đang cố làm, và điều này sẽ dẫn bạn đúng hướng. Khi bạn biết cách đặt câu hỏi vấn đề, bạn đã hoàn thành 80%. Bây giờ bạn có thể làm container trong container, cả: Yo Dawn, I herd u like containers, so we put containers in your containers ... Inception. Bonus: thử xem bạn có thể nest bao nhiêu level trước khi vũ trụ implodes.

Chúc vui.