Docker container với Samba thoát mà không có bất kỳ tin nhắn


8

Chúng tôi có một máy chủ đang chạy CentOS, trên đó có một số dịch vụ trong các container Docker để tách chúng khỏi các thay đổi của máy chủ.

Tuần trước, thứ Sáu, chúng tôi đã chạy một bản cập nhật trên CentOS và kể từ đó, một trong những dịch vụ của chúng tôi bắt đầu và ngay lập tức thoát ra. Các dịch vụ 15+ khác đều ổn.

Tôi đã nhân bản thiết lập vùng chứa, thay đổi tên vùng chứa và xây dựng lại với cùng một vấn đề: vùng chứa bắt đầu và sau đó thoát mà không có bất kỳ thông báo nào.

Container có nguồn gốc từ container samba của David Personette . Lệnh thực sự thoát ra bây giờ nhưng không sử dụng là:

exec ionice -c 3 smbd -FS

Tôi có nên hạ cấp docker sẽ có tác dụng phụ? Có điều gì khác tôi có thể làm để chạy lại này không? Chúng tôi đã chọn các container để trừu tượng khỏi hệ điều hành, đó có phải là sự trừu tượng không tốt như mong đợi?


Điều gì xảy ra nếu bạn chạy một shell trong container và sau đó thực hiện lệnh đó bằng tay?
jordanm

Tôi đã gặp khó khăn khi thử điều đó, container có một điểm vào và yêu cầu các tham số dòng lệnh để bắt đầu. Và nếu nó hoạt động, tôi sẽ không biết làm thế nào để sử dụng nó trong sản xuất, điều đó có thể không?
John

Câu trả lời:


8

Container sẽ thoát mà không có bất kỳ bình luận nào, trừ khi bạn tăng mức độ gỡ lỗi. Bạn có thể sử dụng một cái gì đó như --debuglevel=4.

Khi bạn làm điều đó, xây dựng lại và khởi động lại container, bạn sẽ nhận được một cái gì đó ở cuối như:

Server exit (EOF on stdin)

Và điều đó chỉ ra giải pháp, thay đổi smbdlời mời thành:

exec ionice -c 3 smbd -FS < /dev/null

và container của bạn sẽ không còn trực tiếp thoát ra.

Tôi không chắc chắn điều gì gây ra sự thay đổi ngược không tương thích này, cũng như tại sao điều này không được kiểm tra đối với các mục nhập dockerhub hiện có.

Tôi đã có hai trong số các container của mình bị hỏng khi nâng cấp lên 1.11. và khi hạ cấp xuống 1.10.3, đã gặp phải Cannot stop container .... Container does not exist: container destroyedlỗi đáng sợ . Tôi đã phải dừng docker, xóa tất cả lịch sử, vì vậy tôi thực sự không thể khuyên bạn nên điều đó.


Điều này giúp tôi giải quyết vấn đề ngày hôm qua, mà không phải hạ cấp!
John

1
Tôi đọc ở đâu đó rằng Samba dừng lại thực sự là một tính năng. Nó cố gắng phát hiện nếu quá trình cha của nó đã chết (EOF trên stdin). Giải pháp của bạn hoạt động hoàn hảo.
Martin
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.