docker - làm thế nào để chạy x máy tính để bàn trong một container?


10

Tôi đang cố gắng thiết lập máy Linux của mình để chạy nhiều HĐH khách, một trong số đó là Windows VM và một máy chứa Linux khác. Mục tiêu ở đây là để ngăn tôi làm rối hệ thống máy chủ, trong khi được tự do vận hành hệ điều hành cơ sở và chơi với phần cứng máy chủ. Cuối cùng, trên cơ sở chạy máy tính để bàn của tôi trong container, tôi hy vọng sẽ chạy các mô phỏng tăng tốc đồ họa, v.v. Có lẽ libvirt sẽ hoạt động tốt như với LXC, nhưng chế độ đặc quyền của docker giúp dễ dàng hơn khi không phải định cấu hình thiết bị cho bộ chứa.

Tôi đã thực hiện một nghiên cứu nhỏ và đưa ra một vài câu trả lời, nhưng tôi gặp khó khăn khi kết hợp tất cả lại.

Bối cảnh ở LXC

Chạy X từ LXC đã giúp tôi xem cách tôi có thể định cấu hình bộ chứa với (ví dụ):

lxc.cgroup.devices.allow = c 226:0 rwm

và sử dụng

mknod -m 666 dri/card0 c 226 0

bên trong container để kết nối với thiết bị chủ.

Docker

Từ cuda - Sử dụng GPU từ bộ chứa docker , tôi thấy rằng tôi có thể có cùng thiết lập để hoạt động trong Docker với phụ trợ LXC.

Tôi nhận ra rằng nếu một container docker được chạy ở chế độ đặc quyền, thì nó có thể truy cập GPU bình thường mà không cần cấu hình bổ sung này. Vì vậy, tôi đã kích hoạt một hệ thống cơ sở, cài đặt trình điều khiển đồ họa, xorg-server, xorg-xinit và trình quản lý cửa sổ để kiểm tra.

Lần thử đầu tiên

# startx
Cannot run from a console (or some message like that)

Được rồi, tôi nghĩ rằng tôi đã ở trên tty2.

# tty
/dev/console

Đó không phải là điều tôi mong đợi.

# chvt 2
# tty
/dev/tty2

Vâng, nó xuất hiện như thể làm việc. Hãy thử # startxlại. Nó khởi động trình quản lý cửa sổ, với con trỏ ở giữa. Không có phản ứng chuột. Không có phản ứng bàn phím. Hãy thử thay đổi tty với Ctrl-Alt+F3. Không phản hồi. Chà, có vẻ như tôi sẽ phải khởi động lại lạnh.

Thử lần thứ hai

# tty
/dev/console
# chvt 2
# tty
/dev/console

Gì? Tôi không thể thay đổi nó bây giờ?

Tiếp tục

Sau khi thử một lần khác, tôi đã nhận được nó để thay đổi tty và startx đóng băng máy tính một lần nữa.

Gì bây giờ?

Vì vậy, bây giờ tôi đang ở một xung đột. Tôi thực sự muốn có thể sử dụng một container - Docker ưa thích, LXC với libvirt cũng được chấp nhận - để chạy như hệ điều hành hàng ngày của tôi trong khi vẫn giữ một hệ điều hành máy chủ nạc.

Là tốt nhất để sử dụng Docker với chế độ đặc quyền ở đây, hoặc sử dụng phụ trợ LXC rõ ràng và thử các tùy chọn được liệt kê ở trên?

Tôi đã lên kế hoạch sử dụng libvirt (có thể theo vagrant-libvirt) để quản lý Windows vm của mình, vậy tôi có thể sử dụng libvirt hoặc vagrant-LXC trong trường hợp này không?

Chỉnh sửa: đọc LXC so với Docker , tôi có cảm giác rằng các container Docker và Docker có nghĩa là cho các môi trường ứng dụng đơn, có lẽ tốt nhất là sử dụng LXC thay vì Docker để chạy như hệ điều hành hàng ngày của tôi. Suy nghĩ?

Chỉnh sửa: Tôi đã phát hiện ra rằng, giống như docker, có một lệnh lxc-device cho phép tôi bỏ qua các nhóm và các bước mknod. Trong khi trước khi tôi có thể có x để khởi động và đóng băng hệ thống của mình, thì bây giờ nó chỉ là lỗi. Có lẽ tôi có thể tìm ra điều này cuối cùng, vì dường như không có ai ở ngoài đó.

Cập nhật: Tôi có chuột làm việc. Trên máy khách, tôi đã cài đặt xf86-input-mouse và xf86-input-keyboard. Trên máy chủ, tôi chạy như sau:

# lxc-device -n g1 add /dev/input/mice
# lxc-device -n g1 add /dev/dri/card0
# lxc-device -n g1 add /dev/dri/controlD64
# lxc-device -n g1 add /dev/dri/renderD128
# lxc-device -n g1 add /dev/fb0
# lxc-device -n g1 add /dev/tty2

Làm!


Tôi khá tin rằng LXC là thứ tôi cần sử dụng chứ không phải Docker. Thật không may, đó là một thời gian khá khó khăn để tìm tài liệu cập nhật về việc ràng buộc một tty cụ thể với một container để tôi có thể chạy X. Cả máy chủ và khách của tôi đều sử dụng systemd, trong khi tất cả các tài liệu xung quanh đều liên quan đến / etc / inittab. Có ai biết cách làm việc với các thùng chứa LXC một cách chính xác để khiến chúng "sở hữu" một tty trên máy chủ không?
Paul

Khi tôi đã LXC tty riêng của mình, và card đồ họa assign với nó, tôi đã cố gắng startxvới exec twm, nhưng toàn bộ điều đã bị đóng băng từ quan điểm của tôi. Không có phản ứng với bàn phím hoặc chuột.
Paul

unix.stackexchange.com/questions/18003/linux-lxc-deploying-images-with-tiniest-possible-x11 dường như có câu trả lời phù hợp. Tôi nghĩ rằng tôi cần chuyển tiếp chuỗi / dev / đầu vào. Tôi sẽ thử xem.
Paul


Vâng, tôi nghĩ rằng tôi đã sắp xếp bàn phím. Nhưng bây giờ nó không hoạt động trở lại.
Paul

Câu trả lời:


1

Câu hỏi này đã có câu trả lời mà tôi cần. Tất nhiên, tôi đã sử dụng lxc-devicethay vì định nghĩa cgroup trong tệp cấu hình. Tuy nhiên, trong trường hợp của tôi, tôi chỉ nhận được bàn phím hoạt động trong X nếu tôi khởi động nó trên một tty khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.