Có một số quy trình đang chạy trong vùng chứa Docker, PID của chúng bị cô lập trong vùng tên vùng chứa, có cách nào để tìm ra PID của chúng trên máy chủ Docker không? Ví dụ: có một máy chủ web Apache chạy bên trong vùng chứa Docker, (Tôi sử dụng Apache + PHP hình ảnh từ Docker Hub) và Apache, khi nó bắt đầu, tạo ra nhiều quy trình công nhân bên trong vùng chứa. Những quy trình công nhân đó thực sự đang xử lý các yêu cầu đến. Để xem các quá trình này tôi chạy pstree
bên trong container Docker:PID trong máy chủ, của một quá trình chạy bên trong một thùng chứa Docker là gì?
# pstree -p 1
apache2(1)-+-apache2(8)
|-apache2(9)
|-apache2(10)
|-apache2(11)
|-apache2(12)
`-apache2(20)
Phụ huynh quá trình Apache chạy trên PID 1 bên trong namespace quá trình container. Tuy nhiên theo quan điểm của chủ nó cũng có thể được truy cập, nhưng PID của nó trên máy chủ là khác nhau và có thể được xác định bằng cách chạy docker compose
lệnh:
$ docker inspect --format '{{.State.Pid}}' container
17985
Từ đây chúng ta có thể thấy rằng PID 1 từ bên trong quá trình chứa không gian tên bản đồ để PID 17985 trên máy chủ. Vì vậy, tôi có thể chạy pstree
trên máy chủ, vào danh sách các trẻ em của quá trình Apache:
$ pstree -p 17985
apache2(17985)─┬─apache2(18010)
├─apache2(18011)
├─apache2(18012)
├─apache2(18013)
├─apache2(18014)
└─apache2(18164)
Từ đó tôi cho rằng cùng một cách như thế nào PID 1 trong bản đồ container để PID 17.985 trên máy chủ, nó cũng có bản đồ :
- PID 8 trong container để PID 18.010 trên máy chủ, và
- PID 9 đến PID 18.011;
- PID 10 đến PID 18.012 và vân vân ...
(Điều này cho phép tôi để gỡ lỗi các quá trình từ thùng chứa Docker, sử dụng các công cụ mà chỉ có sẵn chỉ trên máy chủ, và không phải là trong container , như strace)
Vấn đề là tôi không biết làm thế nào an toàn là giả định rằng pstree liệt kê các quy trình theo cùng một thứ tự trong cả thùng chứa và trong máy chủ.
Sẽ rất tuyệt nếu ai đó có thể đề xuất cách đáng tin cậy hơn để phát hiện PID là gì trên máy chủ của một quy trình cụ thể chạy bên trong vùng chứa Docker.
Các PID cũng có thể có nghĩa là hệ điều hành Chủ đề, ít nhất là trên linux. Bạn có thể kiểm tra với java (hoặc ngôn ngữ khác) bằng cách tạo ra một số chủ đề và đếm PIDS bạn nhận được. – ieugen