Vấn đề ở đây là cách tiếp cận của bạn. Docker không có hệ thống init như bạn vẫn quen trên các hệ thống truyền thống. Những gì docker làm là thay thế PID 1 với quy trình bạn chỉ định trong CMD
hoặc ENTRYPOINT
Các lệnh Dockerfile. Hiện tại, hãy bỏ qua ENTRYPOINT
, vì nó thay thế những gì CMD
của bạn được chạy với (thông thường, nó là /bin/sh -c
). Bạn cần hướng dẫn docker khởi động dịch vụ mongod của mình trong Dockerfile bằng CMD
lệnh, như:
CMD usr/bin/mongod
Và khi bạn chạy vùng chứa của mình, mongod sẽ là PID 1. Bây giờ, bạn có thể tự hỏi tại thời điểm này "Nhưng còn máy chủ SSH của tôi thì sao?" và câu trả lời là:Không chạy máy chủ SSH trên các vùng chứa docker của bạn. Có có một số trường hợp sử dụng trong đó việc chạy máy chủ SSH là ổn, nhưng hầu như tất cả các lý do "bình thường" (gỡ lỗi, C&C, v.v.) đều bị vô hiệu hóa bằng "phương pháp hay nhất" để lấy shell trên vùng chứa của bạn:
docker exec -it myContainer /bin/bash
Điều này sẽ đưa bạn vào một trình bao trên vùng chứa đang chạy của bạn. Đề xuất ở đây để quản lý cấu hình và các thay đổi trong vùng chứa docker của bạn là sử dụng một cái gì đó như Ansible. Tuy nhiên, hãy nhớ rằng các bộ chứa docker là tạm thời và bạn không nên khởi động lại các dịch vụ và thay đổi trạng thái cấu hình trên chúng. Nếu bạn cần thay đổi cấu hình, hãy thay đổi Dockerfile hoặc dữ liệu cấu hình, sau đó bắt đầu một vùng chứa mới. Chúc may mắn! Tại đây
là một chút thông tin về Dockerizing MongoDB, nhưng hãy nhớ rằng phương pháp được mô tả ở đó sẽ thay đổi ENTRYPOINT
trong Dockerfile, có liên quan nhiều hơn một chút và yêu cầu hiểu rõ hơn về những gì đang diễn ra trong Dockerfiles.